2009-03-16 6 views
2

CまたはPythonでのバイモーダル分布に従ってランダムな値を生成する最も簡単な方法は何ですか?CまたはPythonでのバイモーダル分布

私はZigguratアルゴリズムやBox-Muller変換のようなものを実装することができますが、すぐに使えるライブラリがあるか、わかりにくい簡単なアルゴリズムがあれば、それが良いでしょう。

+0

Box-Mullerは動作しません。バイモーダルではありません。同じ平均値と標準偏差を持つ2つの独立した値です。 –

答えて

4

2つのモーダルディストリビューションのいずれかの値を選んでいませんか?

http://docs.python.org/library/random.html#random.triangular

あなただけの三角形への通話のためのパラメータの2つのセットの間で前後に切り替えるような音。

def bimodal(low1, high1, mode1, low2, high2, mode2): 
    toss = random.choice((1, 2)) 
    if toss == 1: 
     return random.triangular(low1, high1, mode1) 
    else: 
     return random.triangular(low2, high2, mode2) 

これは、必要なすべてを行う可能性があります。

+0

真の双峰分布をもたらすだろうか?それがうまくいくとは思わないので、まず質問をしました。 –

+0

重複領域が心配ですか? 2つのモードを十分に離れた状態に保ちます。 Box-Muellerはバイモーダルではないという悪い問題を抱えています。同じ平均値と標準偏差を持つ2つの独立した値です。 –

+0

残念ながら、私はその分布を決めることができません(それは紙のものです)。 –

2

古くなったストレートフォワードaccept-reject algorithmが常にあります。それがジョニーフォンノイマンのために十分だったなら、それはあなたのために十分であるはずです;-)。

関連する問題