目次
NumPy入門⑨ 乱数生成とシミュレーション
乱数生成の基本
NumPyは乱数を扱うための機能を豊富に備えており、シミュレーションや統計モデリングに活用できます。
乱数は np.random
モジュールを通して生成します。
import numpy as np
一様乱数
0〜1の範囲で一様に分布する乱数を生成します。
# 0〜1の乱数を10個
print(np.random.rand(10))
# 2行3列の乱数行列
print(np.random.rand(2, 3))
正規分布(ガウス分布)
平均0、標準偏差1の正規分布に従う乱数を生成します。
print(np.random.randn(5)) # 1次元配列
print(np.random.randn(2, 3)) # 2次元配列
任意の整数乱数
指定範囲の整数をランダムに生成します。
# 0〜9の乱数を5個
print(np.random.randint(0, 10, 5))
サンプル抽出
配列からランダムに要素を抽出できます。
arr = np.arange(10)
# ランダムに3個選択
print(np.random.choice(arr, 3))
# 重複なしサンプリング
print(np.random.choice(arr, 3, replace=False))
乱数シードの固定
シードを固定することで、毎回同じ乱数を生成できます。
再現性が必要なシミュレーションでは重要です。
np.random.seed(42)
print(np.random.rand(3)) # 常に同じ結果になる
シミュレーション例① サイコロ
6面サイコロを1000回振った結果をシミュレーションします。
dice = np.random.randint(1, 7, 1000)
print(np.unique(dice, return_counts=True))
シミュレーション例② モンテカルロ法による円周率の近似
点をランダムに打ち、円の内外に入る割合でπを近似します。
n = 100000
x = np.random.rand(n)
y = np.random.rand(n)
inside = (x**2 + y**2) <= 1
pi_estimate = 4 * np.sum(inside) / n
print("推定した円周率:", pi_estimate)
まとめ
rand
,randn
,randint
で一様乱数・正規乱数・整数乱数を生成可能choice
でサンプル抽出、seed
で再現性を確保できる- サイコロやモンテカルロ法などシミュレーションに応用できる