我想运行一个模拟,该模拟使用具有下限A,模式B和上限C的三角概率分布生成的值作为参数 . 如何在Python中生成此值?有没有像expovariate(lambda)(来自随机)这样简单的东西,或者我必须编写这个东西吗?
假设您的发行版不是由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)])
确保一切看起来都没问题 .
如果您下载NumPy软件包,它有一个函数numpy.random.triangular(左,模式,右[,大小]),它完全符合您的要求 .
从那时起,我正在检查Python 2.4的随机文档,我错过了这个:
random.triangular(low, high, mode) ¶返回一个随机浮点数N,使得低<= N <=高并且在这些边界之间具有指定的模式 . 低限和高限默认为零和一 . mode参数默认为边界之间的中点,给出对称分布 . New in version 2.6 .
3 回答
假设您的发行版不是由NumPy或Python标准库处理的 .
在性能不是很重要的情况下,拒绝抽样是一个有用的黑客,可以从您没有使用的分发中获取抽奖 .
对于你的三角形分布,你可以做类似的事情
您可以绘制一些样本
确保一切看起来都没问题 .
如果您下载NumPy软件包,它有一个函数numpy.random.triangular(左,模式,右[,大小]),它完全符合您的要求 .
从那时起,我正在检查Python 2.4的随机文档,我错过了这个:
random.triangular(low, high, mode) ¶返回一个随机浮点数N,使得低<= N <=高并且在这些边界之间具有指定的模式 . 低限和高限默认为零和一 . mode参数默认为边界之间的中点,给出对称分布 . New in version 2.6 .