Python,SimPy:如何从三角概率分布中生成值?

时间:2009-05-03 00:14:54

标签: python distribution probability simpy

我想运行一个模拟,该模拟使用具有下限A,模式B和上限C的三角概率分布生成的值作为参数。如何在Python中生成此值?有没有像expovariate(lambda)(来自随机)这样简单的东西,或者我必须编写这个东西吗?

3 个答案:

答案 0 :(得分:7)

如果您下载NumPy软件包,它有一个函数numpy.random.triangular(左,模式,右[,大小]),它完全符合您的要求。

答案 1 :(得分:5)

因为,我正在检查Python 2.4中随机的文档,我错过了这个:

random.triangular(低,高,模式) ¶     返回随机浮点数N,使得低< = N< =高并且在这些边界之间具有指定模式。低限和高限默认为零和一。 mode参数默认为边界之间的中点,给出对称分布。     版本2.6中的新功能

答案 2 :(得分:3)

假设您的发行版不是由NumPy或Python标准库处理的。

在性能不是很重要的情况下,拒绝抽样是一种非常有用的方法,可以从您没有使用的分发中获取抽奖。

对于三角分布,您可以执行类似

的操作
from random import random, uniform

def random_triangular(low, high, mode):
    while True:
        proposal = uniform(low, high)
        if proposal < mode:
            acceptance_prob = (proposal - low) / (mode - low)
        else:
            acceptance_prob = (high - proposal) / (high - mode)
        if random() < acceptance_prob: break
    return proposal

您可以绘制一些样本

pylab.hist([random_triangular(1, 6, 5) for t in range(10000)])

确保一切正常。