7

下限A、モードB、上限Cの三角確率分布から生成された値をパラメーターとして使用するシミュレーションを実行したいのですが、Pythonでこの値を生成するにはどうすればよいですか?この分布にはexpovariate(lambda)(ランダムから)のような単純なものがありますか、それともこれをコーディングする必要がありますか?

4

3 に答える 3

9

NumPyパッケージをダウンロードすると、探しているものを正確に実行する関数numpy.random.triangular(left、mode、right [、size])があります。

于 2009-05-03T00:30:52.737 に答える
6

Python 2.4からランダムのドキュメントをチェックしていたので、これを見逃しました。

random.triangular(low、high、mode)¶low <= N <= highであり、それらの境界の間に指定されたモードがあるランダムな浮動小数点数Nを返します。下限と上限はデフォルトで0と1になります。mode引数は、デフォルトで境界間の中間点になり、対称的な分布になります。 バージョン2.6の新機能

于 2009-05-03T02:55:44.790 に答える
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)])

すべてが正常に見えることを確認します。

于 2009-05-28T20:49:34.227 に答える