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