use*_*465 7 python numpy probability scipy
我想指定一个分布的可能密度函数,然后在python中从该分布中选取N个随机数.我该怎么做呢?
通常,您希望具有逆累积概率密度函数.一旦你有了,那么沿着分布生成随机数很简单:
import random
def sample(n):
return [ icdf(random.random()) for _ in range(n) ]
Run Code Online (Sandbox Code Playgroud)
或者,如果您使用NumPy:
import numpy as np
def sample(n):
return icdf(np.random.random(n))
Run Code Online (Sandbox Code Playgroud)
在两种情况下icdf都是逆累积分布函数,它接受0到1之间的值,并从分布中输出相应的值.
为了说明其性质icdf,我们将在值10和12之间进行简单的均匀分布,例如:
概率分布函数在10到12之间为0.5,在其他地方为零
累积分布函数0低于10(无样本低于10),1高于12(无样本高于12)并且在值之间线性增加(PDF的整数)
逆累积分布函数仅定义在0和1之间.在0时它是10,12在它是1时,它们在值之间线性变化
当然,困难的部分是获得逆累积密度函数.这实际上取决于你的分布,有时候你可能有分析功能,有时候你可能想要求插值.数值方法可能是有用的,因为可以使用数值积分来创建CDF,并且可以使用插值来反转它.