我有能量的幂律分布,我想根据分布选择n个随机能量。我尝试使用随机数手动执行此操作,但对于我想要执行的操作而言效率太低。我想知道numpy(或其他)有没有像numpy.random.normal
那样工作的方法,除了使用正态分布之外,可以指定分布。所以,在我脑海里的例子可能看起来像(类似于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的列表。如果我要直方图,它会有更大的bin值在较低的能量。
我不确定这种方法是否存在,但看起来应该如此。我希望很清楚我想要做什么。
编辑:
我看到numpy.random.power
但我的指数为-1,所以我不认为这会工作。
不正是你想要的PDF?配电是beta的一个特例,你可以用它来代替http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.beta.html? – wim
@wim,我相信我想要一个在我的能量范围外f(x)= 0和f(x)= x ** a(其中a可以是-5到5之间的值)的分段函数。我看不到beta如何在这里工作。 – davly
@davly更新我的答案与代码片段,以防这种情况有用 –