[解決済み] 和が1になるような乱数のリストを生成する。
2022-11-09 05:59:29
質問
-
この質問は、以下の質問と重複するものではありません。
合計がMであるN個の乱数を取得する
なぜなら
- ほとんどの の回答は理論に関するものであり、この質問に答えるためのpythonでの具体的なコーディングソリューションではありません。
- ここで受け入れられた答えは、この質問に答える重複した1つの答えよりも5年古いです。
- 重複して受理された回答は、この質問に回答していません。
N個(100個)の乱数の和が1になるようなリストを作るにはどうしたらよいでしょうか?
で乱数のリストを作ることができます。
r = [ran.random() for i in range(1,100)]
リストの合計が1になるように、どのようにこれを修正すればよいでしょうか(これは確率シミュレーションのためです)。
どのように解決するのですか?
最も簡単な方法は、N個のランダムな値を取り、その合計で割ることです。
より一般的な解決策は ディリクレ分布 であり numpyで利用可能です。 .
分布のパラメータを変更することで、個々の数値のquot;randomness"を変更することができます。
>>> import numpy as np, numpy.random
>>> print np.random.dirichlet(np.ones(10),size=1)
[[ 0.01779975 0.14165316 0.01029262 0.168136 0.03061161 0.09046587
0.19987289 0.13398581 0.03119906 0.17598322]]
>>> print np.random.dirichlet(np.ones(10)/1000.,size=1)
[[ 2.63435230e-115 4.31961290e-209 1.41369771e-212 1.42417285e-188
0.00000000e+000 5.79841280e-143 0.00000000e+000 9.85329725e-005
9.99901467e-001 8.37460207e-246]]
>>> print np.random.dirichlet(np.ones(10)*1000.,size=1)
[[ 0.09967689 0.10151585 0.10077575 0.09875282 0.09935606 0.10093678
0.09517132 0.09891358 0.10206595 0.10283501]]
ディリクレ分布は主要なパラメータによって、すべての値が1./N(Nはベクトルの長さ)に近いベクトルを与えるか、ベクトルの値のほとんどが〜0、1が1つあるベクトルを与えるか、それらの中間のものを与えるかのいずれかになります。
編集 (オリジナルの回答から5年後)。ディリクレ分布に関するもう一つの有用な事実は、ガンマ分布の確率変数の集合を生成し、それらの合計で割ると、自然にそれが得られるということです。
関連
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] リスト内のアイテムのインデックスを検索する
-
[解決済み] JavaScriptでランダムな文字列/文字を生成する
-
[解決済み] JavaScriptで特定の範囲のランダムな整数を生成する?
-
[解決済み] 乱数(int)を生成する方法を教えてください。
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] リストからランダムに項目を選択するにはどうすればよいですか?
-
[解決済み] 0から9までのランダムな整数を生成する
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Pythonでランダムなファイル名を生成する最良の方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] pandasのDataFrameから空のセルを含む行を削除する
-
[解決済み] タプルのリストを複数のリストに変換するには?
-
[解決済み] PythonからSMTPを使用してメールを送信する
-
[解決済み] 古いバージョンのPythonにおける辞書のキーの並び順
-
[解決済み] Pythonによる一対のクロスプロダクト [重複] (英語)
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] virtualenv の `--no-site-packages` オプションを元に戻す。
-
[解決済み] Pythonで、ウェブサイトが404か200かを確認するためにurllibをどのように使用しますか?
-
[解決済み] Pythonの文字列の前にあるbという接頭辞は何を意味するのですか?