乱数を固定する

固定する方法はシードを指定する、または発生させた乱数を保存しておいて呼び出すの2つ

シードを固定

import numpy as np
# セルを何度実行しても結果は同じです
for _ in range(3):
    np.random.seed(0)
    print(np.random.randint(0, 10, 5))
[5 0 3 3 7]
[5 0 3 3 7]
[5 0 3 3 7]
# セルを実行するたびに、全体は変わりますが、3行は同じ行になります
state = np.random.get_state()
for _ in range(3):
    np.random.set_state(state)
    print(np.random.rand(5))
[0.4236548  0.64589411 0.43758721 0.891773   0.96366276]
[0.4236548  0.64589411 0.43758721 0.891773   0.96366276]
[0.4236548  0.64589411 0.43758721 0.891773   0.96366276]

NumPyなどで生成される乱数は、擬似乱数といって必ずシードを元に作成されます。
シードは、Pythonの環境を最初に実行した時に、時刻などで初期化されます。
明示的にシードを指定しなくても、ランダムに乱数が発生するのはこのためです。

(注)シードを指定すると、乱数がリセットされた状態になりますので、通常は、最初に一度だけ指定します。get_stateで現在の状態を取得できます。set_stateで状態を設定して戻せます。

データ保存する場合

# 多次元配列をファイルに保存
data = np.random.rand(5)
np.save('tmp.npy', data)
data
array([0.38344152, 0.79172504, 0.52889492, 0.56804456, 0.92559664])
# 多次元配列をファイルに保存
data = np.random.rand(5)
np.save('tmp.npy', data)
data
array([0.38344152, 0.79172504, 0.52889492, 0.56804456, 0.92559664])
# ファイルから多次元配列を取得
data = np.load('tmp.npy')
data  # 同じ多次元配列
array([0.38344152, 0.79172504, 0.52889492, 0.56804456, 0.92559664])
  • numpy.save(ファイル名, 多次元配列) で、多次元配列をファイルに保存できます。
  • numpy.load(ファイル名) で、ファイルから多次元配列を取得できます。

コメント

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