シミュレーションをする際など指定した確率で要素を生成したいことがあります。例えば天気に基づいた売上をシミュレーションする際に天気を
- 晴: 確率50%
- 曇: 確率35%
- 雨: 確率15%
で生成したい場合などです。ここではNumPyで提供されているrandom.choiceを使い指定した確率で要素を生成する方法を紹介します。なお、PythonスクリプトをGitHub上にアップしているのでそちらもご参照ください。
random.choiceによる指定確率での要素生成
NumPyには配列から要素を指定した確率で選ぶ関数として
numpy.random.choice(a, size=None, replace=True, p=None)
が用意されています。引数には
- a: 生成した要素の配列
- size: 生成するサンプル数。指定しないと1つ生成
- replace: Trueだと復元抽出、Falseだと非復元抽出
- p: 要素別の生成確率。指定しないと一様分布で生成
を指定します。なお、
- 非復元抽出(replace=False)の場合: サンプル数(size)を配列の要素数以下にする
- 生成確率pを指定: pは配列aと同じサイズで要素は0以上、合計が1になるように指定
する必要があります。
実行例
天気(晴/曇/雨)を
- 晴: 確率50%
- 曇: 確率35%
- 雨: 確率15%
で10,000個生成する場合は
import numpy as np element_list = ['晴', '曇', '雨'] prob_list = [0.50, 0.35, 0.15] sample_size = 10000 samples = np.random.choice(a=element_list, size=sample_size, p=prob_list)
とすることで指定した確率で要素を生成できます。実際、ヒストグラムを見てみると
と確かに指定した確率で晴/曇/雨が生成できています。
参考情報
- SciPy.org