numpy.randomでランダムなデータを生成する

numpy.randomでランダムなデータを生成する

NumPy の random モジュールでは様々な乱数の生成方法が用意されています。通常の乱数(一様乱数)を生成するには、random.rand関数を使います。

一様乱数を生成するrand関数

random.rand関数で 0~1 の範囲で一様乱数を生成できます。引数で生成する個数を指定できます。

生成される値は float です。

rand関数のパラメータ

numpy.random.rand(d0, d1, ..., dn)

パラメータで個数を複数指定すると、多次元配列で乱数を生成してくれます。

import numpy as np

a = np.random.rand()
print(a)
# 0.8479624563374656

b = np.random.rand(5)
print(b)
# [ 0.50241569  0.60797376  0.15662504  0.80240737  0.45856716]

c = np.random.rand(3, 3)
print(c)
# [[ 0.80980728  0.13372907  0.94651415]
#  [ 0.8683717   0.13815015  0.69999044]
#  [ 0.12915836  0.61522826  0.94836845]]

値の範囲を0~1ではなく任意の範囲(a~b)にしたい場合は、あとから次のように演算処理を行い調整します。

rand() * (b-a) + a
import numpy as np

# 7~10の範囲で一様乱数を生成
# rand() * (b-a) + a 
a = np.random.rand(5) * (10-7) + 7

print(a) 
# [ 8.83920313  9.07908167  7.39459357  8.1000475   7.84917796]

整数で乱数を生成するrandint関数

rand関数はfloatで生成しますが、整数値で一様乱数を生成するには random.randint 関数を使用します。

randint関数のパラメータ

numpy.random.randint(low, high=None, size=None, dtype='l')

パラメータ 説明
low int 生成される乱数の最小値を指定します。
high int 省略可能。生成される乱数の最大値+1を指定します。この値は生成される値に含まれません。
size int もしくは タプル 生成される配列のサイズを指定します。多次元配列を生成する場合、タプルでサイズを指定します。
dtype dtype 省略可能。出力配列の型を指定します。
import numpy as np

# 0から9の範囲の乱数(整数値)
a = np.random.randint(10)
print(a)
# 8

# 0から100の範囲の乱数(整数値)を10個生成
b = np.random.randint(1, 100, 10)
print(b)
# [24 16 98 58 37 63 40 32 67 23]

# 2×3の配列で生成
c = np.random.randint(10, size=(2, 3))
print(c)
# [[2 9 7]
#  [4 3 7]]

シード値で乱数を固定する

乱数生成の元となるデータをシード(seed, 種の意味)と言います。同じシードからは同じ乱数値が生成されます。

numpy.random.seed でシード値を設定できます。同じシード値を設定することで発生する乱数を固定させることができます。検証時に再現性が必要な場面で必要になったりします。

import numpy as np

# 100でシードを初期化
np.random.seed(100)
print(np.random.rand(3))
print(np.random.randint(10, size=3))
# [ 0.54340494  0.27836939  0.42451759]
# [0 4 2]

# 100でシードを再初期化
np.random.seed(100)
print(np.random.rand(3))
print(np.random.randint(10, size=3))
# [ 0.54340494  0.27836939  0.42451759]
# [0 4 2]

# 200でシードを再初期化すると違う値
np.random.seed(200)
print(np.random.rand(3))
print(np.random.randint(10, size=3))
# [ 0.94763226  0.22654742  0.59442014]
# [9 9 9]

# シード値を適当な値に戻す
np.random.seed() # Noneにする
print(np.random.rand(3))
print(np.random.randint(10, size=3))
# ランダムな値

シード値はNoneでリセットできます。リセットされるとランダムな状態に戻ります。

まとめ

  • numpy.random.rand 関数で 0から1 の範囲で乱数を生成できる。
  • numpy.random.randint 関数で整数の乱数値を生成できる。
  • numpy.random.seed 関数でシード値を指定して、乱数を固定できる。

参考URL