はじめに
データ分析や機械学習の世界では、「乱数」は欠かせない要素です。サンプリング、モデルの初期化、シミュレーション実験など、さまざまな場面で乱数が活躍します。
NumPyには強力な乱数生成機能が備わっており、np.random モジュールを使えば、乱数の発生から再現性のある実験設定まで簡単に行うことができます。
この記事では、基本的な乱数の使い方から、平均・標準偏差を指定した分布の生成、再現性の確保、シミュレーションへの応用までを順に解説します。
乱数の基本:np.randomの使い方
一様分布に従う乱数(0以上1未満)
import numpy as np
np.random.seed(0) # 再現性のための初期化
arr = np.random.rand(5)
print(arr)任意の範囲で整数を生成(サイコロの例)
dice = np.random.randint(1, 7, size=10)
print(dice)randint(最小値, 最大値, サイズ)- 最大値は「含まれない」ことに注意!
正規分布に従う乱数の生成
平均と標準偏差を指定
data = np.random.normal(loc=100, scale=15, size=1000)loc: 平均値(中心)scale: 標準偏差(ばらつき)
これはテストの点数分布などに応用できます。
分布を確認する(ヒストグラム)
import matplotlib.pyplot as plt
plt.hist(data, bins=30)
plt.title("正規分布のヒストグラム")
plt.xlabel("値")
plt.ylabel("度数")
plt.show()再現性の確保:乱数シードの使い方
乱数という名前ですが、「完全なランダム」ではなく、プログラム上では**擬似乱数(pseudo random)**です。乱数シードを固定すれば、まったく同じ乱数列を再現できます。
np.random.seed(42)
print(np.random.rand(3))これにより、機械学習やモンテカルロ法などで「毎回結果が違う!」という問題を防げます。
実例:コイン投げシミュレーション
コインを100回投げる → 表=1, 裏=0とする
coin = np.random.randint(0, 2, size=100)
print("表が出た回数:", np.sum(coin))複数回のシミュレーション(サンプルサイズのばらつき)
results = []
for _ in range(1000):
toss = np.random.randint(0, 2, size=100)
results.append(np.mean(toss))
plt.hist(results, bins=20)
plt.title("コイン投げのシミュレーション")
plt.xlabel("表の割合")
plt.ylabel("頻度")
plt.show()その他の便利な乱数関数
| 関数名 | 概要 |
|---|---|
rand() | 0〜1の一様乱数 |
randn() | 標準正規分布(平均0・標準偏差1) |
normal() | 任意の正規分布 |
choice() | 指定した配列からランダム抽出 |
shuffle() | 配列の順番をランダムに並び替え |
おわりに
乱数の使い方を理解すると、データの準備やアルゴリズムの検証がぐっとやりやすくなります。特に「シードを固定することによる再現性の確保」は、実務において非常に重要なテクニックです。
次回は、NumPyの応用編として「便利関数大全(np.where, np.any, np.all, np.selectなど)」を取り上げます。
✅ NumPy中級シリーズ:目次リンク
🔹 NumPy中級シリーズ一覧(基礎〜応用)
- 【中級①】配列操作の基本と応用|reshape・axis・スライスをマスター
↳ NumPy中級①:配列操作の基本と応用|reshape・axis・スライスをマスター - 【中級②】ブロードキャストと演算の仕組みを徹底解説
↳ NumPy中級②:ブロードキャストと演算の仕組みを徹底解説 - 【中級③】条件抽出と論理演算|配列を自在にフィルタリングする
↳ NumPy中級③:条件抽出と論理演算|配列を自在にフィルタリングする - 【中級④】乱数生成とシミュレーション|再現性と統計処理の基礎
↳ NumPy中級④:乱数生成とシミュレーション|再現性と統計処理の基本 - 【中級⑤】応用編:np.where, np.select, np.any, np.allの便利な使い方
↳ NumPy中級⑤:便利関数大全|np.where, np.any, np.all, np.select を使いこなす

コメント