У меня есть степенное распределение энергий, и я хочу выбрать n случайных энергий на основе распределения. Я пытался сделать это вручную, используя случайные числа, но это слишком неэффективно для того, что я хочу сделать. Мне интересно, есть ли метод в numpy (или другом), который работает как numpy.random.normal
, за исключением того, что вместо использования нормального распределения может быть указано распределение. Итак, на мой взгляд, пример может выглядеть так (похоже на numpy.random.normal):
import numpy as np
# Energies from within which I want values drawn
eMin = 50.
eMax = 2500.
# Amount of energies to be drawn
n = 10000
photons = []
for i in range(n):
# Method that I just made up which would work like random.normal,
# i.e. return an energy on the distribution based on its probability,
# but take a distribution other than a normal distribution
photons.append(np.random.distro(eMin, eMax, lambda e: e**(-1.)))
print(photons)
Печать photons
должна дать мне список длиной 10000, заполненный энергиями в этом распределении. Если бы я построил гистограмму, у нее были бы гораздо большие значения ячеек при более низких энергиях.
Я не уверен, существует ли такой метод, но кажется, что он должен. Надеюсь, понятно, что я хочу сделать.
РЕДАКТИРОВАТЬ:
Я видел numpy.random.power
, но мой показатель степени равен -1, поэтому я не думаю, что это сработает.