首页 文章

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

提问于
浏览
6

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

3 回答

  • 7

    假设您的发行版不是由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)])
    

    确保一切看起来都没问题 .

  • 3

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

  • 5

    从那时起,我正在检查Python 2.4的随机文档,我错过了这个:

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

相关问题