【发布时间】:2014-07-07 11:34:37
【问题描述】:
我有一个能量的幂律分布,我想根据分布选择 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 的列表,该列表由该分布中的能量填充。如果我要对此进行直方图,它将在较低能量下具有更大的 bin 值。
我不确定这种方法是否存在,但似乎应该存在。我希望很清楚我想要做什么。
编辑:
我见过numpy.random.power,但我的指数是-1,所以我认为这行不通。
【问题讨论】:
-
您到底想要什么 pdf?配电是 beta 的一个特例,你能用它来代替docs.scipy.org/doc/numpy/reference/generated/… 吗?
-
@wim ,我相信我想要一个分段函数,它是我的能量范围之外的 f(x)=0 和 f(x)=x**a (其中 a 可以是一个值从 -5 到 5) 内。我看不到测试版在这里会如何工作。
-
@davly 用代码 sn-p 更新了我的答案,以防万一这有帮助
标签: python numpy random distribution