pythonで確率による乱数生成
2022-02-16 13:02:43
口は災いの元、コードを見せよ。
random_demo.pyのコードは以下の通りです。
# coding: utf-8
import random
def random_index(rate):
"""Probability function of a random variable"""
#
# The parameter rate is the list
# Returns the subscript index of the probability event
start = 0
index = 0
randnum = random.randint(1, sum(rate))
for index, scope in enumerate(rate):
start += scope
if randnum <= start:
break
return index
def main():
arr = ['red', 'green', 'blue']
rate = [45, 30, 25]
red_times = 0
green_times = 0
blue_times = 0
for i in xrange(10000):
if arr[random_index(rate)] == 'red':
red_times += 1
if arr[random_index(rate)] == 'green':
green_times += 1
if arr[random_index(rate)] == 'blue':
blue_times += 1
print red_times, green_times, blue_times
if __name__ == '__main__':
main()
結果を表示します。
$ python random_demo.py
4507 3009 2537
$ python random_demo.py
4586 3055 2485
$ python random_demo.py
4483 2996 2506
$ python random_demo.py
4586 3015 2480
$ python random_demo.py
4513 3057 2415
$ python random_demo.py
4494 3014 2456
$ python random_demo.py
4502 2978 2505
$ python random_demo.py
4475 3041 2528
$ python random_demo.py
4561 3043 2520
$ python random_demo.py
4558 2923 2474
$ python random_demo.py
4536 2957 2535
$ python random_demo.py
4526 2985 2576
$ python random_demo.py
4532 2936 2547
$ python random_demo.py
4420 2908 2447
注:上記のコード例はPython2.7で、以下のpython3のサンプルコードに置き換えられ、確率事象の数が合計数に加算されることが保証されています。
import random
def random_index(rate):
"""The probability function of a random variable """
#
# The parameter rate is the list
# Returns the subscript index of the probability event
start = 0
index = 0
randnum = random.randint(1, sum(rate))
for index, scope in enumerate(rate):
start += scope
if randnum <= start:
break
return index
def main():
arr = ['red', 'green', 'blue']
rate = [45, 30, 25]
red_times = 0
green_times = 0
blue_times = 0
count = 0
for i in range(10000):
count += 1
index = random_index(rate)
if arr[index] == 'red':
red_times += 1
elif arr[index] == 'green':
green_times += 1
elif arr[index] == 'blue':
blue_times += 1
print(count, red_times, green_times, blue_times)
if __name__ == '__main__':
main()
ご覧の通り、赤、緑、青のヒット数はその45:30:25の比率に非常に近く、random_index(rate)関数がコアコードとなっていることがわかります。
OK、お楽しみに〜。
関連
-
[解決済み] Pythonスクリプトを内部から再起動する
-
pipでpythonパッケージをインストールする際のよくあるエラーと解決方法
-
[解決済み] NumPyの配列を切り詰めずに、完全に表示するにはどうしたらよいですか?
-
[解決済み] Pythonで、あるオブジェクトが反復可能かどうかを判断するにはどうしたらいいですか?
-
[解決済み] Gensim: TypeError: doc2bow expects an array of unicode tokens on the input, not the single string
-
[解決済み] Pandas dropna()関数が動作しない
-
[解決済み] Google foo.bar レベル3 (queue_to_do) を完了しようとすると、制限時間を超過し続ける [終了] 。
-
[解決済み] Windows- アプリクリック時のPyinstallerエラー "failed to execute script" について
-
python3 航空機戦争のソースコードとソースコード使用のチュートリアル(白人に最初の小さなゲームを作らせる)。
-
エラーの解決方法 ValueError: allow_pickle=Falseの場合、オブジェクトの配列を読み込むことができません。
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】itertools.groupby()を使うにはどうしたらいいですか?)
-
[解決済み] urllib2 HTTP エラー 400: 不正なリクエスト
-
[解決済み】Python 3.5とAnacondaを使用してモジュールcPickleが見つかりません。
-
Pythonの文字列の詳細
-
[解決済み] タートルグラフィックスを用いたシェルピンスキーの三角形の再帰計算
-
[解決済み] Pythonのnumpy.exp関数におけるオーバーフローエラー
-
[解決済み] ImportError: Cython'という名前のモジュールがない [重複] 。
-
[解決済み] matplotlibのレイヤーの順番を指定する
-
[解決済み] ImportError: flask_sqlalchemy' という名前のモジュールがない/2バージョンのPythonがインストールされている
-
[解決済み] リストにforループを追加する