我想指定 probability density function一个分布,然后在 Python 中从该分布中选取 N 个随机数。我该怎么做?
最佳答案
一般来说,您想要逆累积概率密度函数。一旦你有了它,那么沿着分布生成随机数就很简单了:
import random
def sample(n):
return [ icdf(random.random()) for _ in range(n) ]
或者,如果您使用 NumPy:
import numpy as np
def sample(n):
return icdf(np.random.random(n))
在这两种情况下,icdf
都是逆累积分布函数,它接受 0 到 1 之间的值,并根据分布输出相应的值。
为了说明icdf
的性质,我们将以值 10 和 12 之间的简单均匀分布为例:
概率分布函数在 10 到 12 之间为 0.5,其他地方为零
累积分布函数在 10 以下为 0(没有低于 10 的样本),在 12 以上为 1(没有样本超过 12)并且在值之间线性增加(PDF 的积分)
逆累积分布函数只定义在 0 和 1 之间。0 时为 10,12 时为 1,并且在值之间呈线性变化
当然,困难的部分是获得逆累积密度函数。这真的取决于你的分布,有时你可能有一个分析函数,有时你可能想求助于插值。数值方法可能会有用,因为数值积分可用于创建 CDF,插值可用于反转它。
关于python - 使用给定的概率密度函数生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25471457/