1. ホーム
  2. python

[解決済み] 与えられた(数値)分布で乱数を発生させる

2022-04-13 04:34:28

質問

異なる値に対する確率を記録したファイルがあります。

1 0.1
2 0.05
3 0.05
4 0.2
5 0.4
6 0.2

この分布を使って乱数を生成したいのですが、どうすればいいですか?これを扱う既存のモジュールは存在するのでしょうか?自分でコーディングするのはかなり簡単なのですが(累積密度関数を構築し、ランダムな値 [0,1] を生成し、対応する値を選ぶ)、これはよくある問題のはずなので、おそらく誰かがそのための関数/モジュールを作成しているように思えます。

誕生日のリスト(標準ではどのような分布にも従わない)を生成したいので、これが必要です。 random モジュール)。

解決方法は?

scipy.stats.rv_discrete が欲しいかもしれません。 確率は values パラメータを使用します。 次に rvs() メソッドで乱数を生成します。

コメントでEugene Pakhomovが指摘したように、このメソッドに p キーワードパラメータを numpy.random.choice() は、例えば、次のようになります。

numpy.random.choice(numpy.arange(1, 7), p=[0.1, 0.05, 0.05, 0.2, 0.4, 0.2])

Python 3.6以降を使用している場合は random.choices() を標準ライブラリからダウンロードします。 Mark Dickinsonによる回答 .