Python|高度な乱数生成を行う:numpy.random

1. はじめに

Pythonで乱数を扱う際、多くの人が最初に使うのが標準ライブラリの random モジュールです。しかし、より高速で大量の乱数を扱いたい場合や、正規分布など高度な確率分布に基づく乱数生成を行いたい場合には、numpy.random モジュールの出番です。

この記事では、「Python|高度な乱数生成を行う:numpy.random」というタイトルの通り、NumPyライブラリを使った乱数生成の基本から応用までを、初心者でも理解できるように丁寧に解説します。

  • NumPyを使った効率的な乱数生成方法
  • さまざまな分布(正規分布、二項分布など)に基づく乱数の生成
  • 再現性のある乱数の使い方(シードの設定)
  • 実務やデータ分析での活用方法

 

2. numpy.randomの基本的な使い方と概念

2-1. numpy.randomとは?

NumPyの random モジュールは、乱数生成に関する多数の関数を提供しており、配列単位での高速な乱数生成が可能です。また、正規分布・ポアソン分布・二項分布など、確率統計の分布に基づく乱数も簡単に生成できます。

2-2. ランダムな数値を生成する:rand()

import numpy as np

# 1つの乱数を生成
print(np.random.rand())

# 3つの乱数を生成(1次元配列)
print(np.random.rand(3))

# 2行3列の乱数を生成(2次元配列)
print(np.random.rand(2, 3))

実行結果:

0.5488135
[0.71518937 0.60276338 0.54488318]
[[0.4236548  0.64589411 0.43758721]
 [0.891773   0.96366276 0.38344152]]

2-3. 整数の乱数を生成する:randint()

# 0〜9の整数をランダムに1つ生成
print(np.random.randint(0, 10))

# 5つの乱数を1次元配列で生成
print(np.random.randint(0, 100, size=5))

実行結果:

7
[29 87 45 92 56]

 

3. よくある使い方・応用例

3-1. 正規分布に基づく乱数を生成:normal()

# 平均0、標準偏差1の正規分布から10個の値を生成
data = np.random.normal(loc=0, scale=1, size=10)
print(data)

実行結果:

[-0.10321885  0.4105985   0.14404357  1.45427351 -0.18718385 
  1.46935877  0.15494743  0.37816252 -0.88778575 -1.98079647]

3-2. データ分析で使える:サンプルのシャッフル

arr = np.array([1, 2, 3, 4, 5])
np.random.shuffle(arr)
print(arr)

実行結果:

[4 1 5 2 3]

3-3. 再現性のある乱数:乱数シードの設定

np.random.seed(42)
print(np.random.rand(3))

実行結果:

[0.37454012 0.95071431 0.73199394]

 

4. 注意点・エラー対策

4-1. NumPyがインストールされていない

NumPyが導入されていないと、ModuleNotFoundErrorが発生します。以下のコマンドでインストールしましょう。

pip install numpy

4-2. rand()とrandom()の混同に注意

  • random.random():Python標準。引数なしで1つの浮動小数点数を返す。
  • np.random.rand():NumPy。形状を指定して配列を返す。

4-3. データ型に注意

randint()は整数専用です。小数が必要なら rand()uniform() を使いましょう。

 

5. まとめ

本記事では、「Python|高度な乱数生成を行う:numpy.random」というテーマのもと、NumPyを用いた効率的な乱数生成の方法を基礎から応用まで学びました。

  • np.random.rand()randint()で基本の乱数生成
  • normal()shuffle()で応用的な処理も可能
  • シード値で再現性を確保できる

NumPyは単なる配列操作ライブラリではなく、統計処理やデータサイエンスの基盤として非常に強力なツールです。この記事を参考に、実務や学習に活用してみてください。

タイトルとURLをコピーしました