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