[Python]Numpyを使ったRandom Seedの設定 デフォルトとTime

はじめに

PythonとNumpyは、ランダム数値を生成するための標準ライブラリを提供しています。ランダム数値は、シミュレーションや暗号化などの分野で広く使われています。しかし、ランダム数値は予測が困難であるため、再現性を持たせるためにRandom Seedを設定することが重要です。

Pythonにおけるrandomとrandom.seedの基本的な説明

Pythonのrandomモジュールは、様々な種類のランダム数値を生成するための関数を提供しています。random.seed関数は、ランダム数列を生成するアルゴリズムに与える初期値を設定するための関数です。同じ初期値を与えると、同じランダム数列が生成されます。

import random
random.seed(0)
print(random.random()) # 0.8444218515250481
random.seed(0)
print(random.random()) # 0.8444218515250481

上記のコードでは、random.seed関数に0を与えています。同じ初期値を与えた場合、同じランダム数列が生成されることが確認できます。

Numpyにおけるrandomとrandom.seedの基本的な説明

Numpyのrandomモジュールは、Pythonのrandomモジュールと同様に、様々な種類のランダム数値を生成するための関数を提供しています。random.seed関数は、ランダム数列を生成するアルゴリズムに与える初期値を設定するための関数です。

import numpy as np
np.random.seed(0)
print(np.random.rand()) # 0.5488135039273248
np.random.seed(0)
print(np.random.rand()) # 0.5488135039273248

上記のコードでは、np.random.seed関数に0を与えています。同じ初期値を与えた場合、同じランダム数列が生成されることが確認できます。

Pythonでのrandom.seedのデフォルト設定について

random.seed関数は、デフォルトで現在の時刻を初期値として設定します。これは、毎回異なるランダム数列を生成するための設定です。

import random
print(random.random()) # 0.5386647680113555
print(random.random()) # 0.4191945144032948

上記のコードでは、random.seed関数を呼び出していませんが、ランダム数列が生成されています。これは、デフォルトで現在の時刻が初期値として設定されるためです。

Numpyでのrandom.seedのデフォルト設定について

Numpyのrandom.seed関数も、デフォルトで現在の時刻を初期値として設定します。

import numpy as np
print(np.random.rand()) # 0.6027633760716439
print(np.random.rand()) # 0.5448831829968969

上記のコードでは、np.random.seed関数を呼び出していませんが、ランダム数列が生成されています。これは、デフォルトで現在の時刻が初期値として設定されるためです。

ランダムなDatetimeを生成する。

ランダムなDateTimeを生成する方法は以下の記事の「Random Datetime生成の方法」にサンプルスクリプトを記載しているのでご確認ください。

[Python]Global Default Seedを使用したRandom Datetime生成法 | 自作で機械学習モデル・AIの使い方を学ぶ (machine-learning-skill-up.com)

まとめ

PythonとNumpyを使ったRandom Seedの設定について解説しました。ランダム数値を扱う場合は、再現性を持たせるためにRandom Seedを設定することが重要です。Pythonのrandom.seed関数とNumpyのrandom.seed関数は、初期値を設定するための関数です。必要に応じてSeedを固定しましょう。