Python入門トップページ


目次

  1. 実数分布
  2. 整数分布
  3. シーケンス用の関数
  4. 乱数生成器の初期化
  5. 参考資料

乱数を使ってみよう

乱数生成器の初期化

シミュレーションやニューラルネットワーク(ディープラーニング)等で多数の乱数を発生させる必要がある場合は,処理速度等の理由から NumPy の乱数生成 (Random Generator) の使用を推奨します.

ここまで発生させた乱数は,実行ごとに毎回異なる結果になっていたはずである.例えば,次のようなコードを実行するとその都度異なった乱数列が生成される(3回の実行結果を並べてある).

サイコロの目import random # プログラムの先頭でモジュールを読み込む
n = 10
for i in range(n):
    die = random.randint(1,6)
    print(die, end=" ")
3 4 3 5 3 6 1 2 2 6
5 4 2 1 4 4 4 1 1 4
6 6 3 2 3 6 2 4 2 4

しかしながらプログラムのデバッグ中やシミュレーションでは,乱数に再現性をもたせて毎回同じ乱数列を発生させたいような状況もある.このような場合には,random.seed(引数) をプログラムの先頭で実行すると良い.この関数に適当な引数(整数,実数,文字列など)を与えると,乱数生成器が初期化されて毎回同じ乱数列が出力されることになる.例えば,random.seed(1) で乱数生成器を初期化するプログラムは何度実行しても同じ乱数列が出力される.

サイコロの目:乱数生成器を1で初期化# 乱数のシードを設定する(ここを有効にすると毎回同じ乱数列になる)
random.seed(1)
n = 10
for i in range(n):
    die = random.randint(1,6)
    print(die, end=" ")
2 5 1 3 1 4 4 4 6 4
2 5 1 3 1 4 4 4 6 4
2 5 1 3 1 4 4 4 6 4

もちろん,異なる引数で乱数生成器を初期化すると別の乱数列が出力される.

サイコロの目:乱数生成器を2で初期化# 乱数のシードを設定する(ここを有効にすると毎回同じ乱数列になる)
random.seed(2)
n = 10
for i in range(n):
    die = random.randint(1,6)
    print(die, end=" ")
1 1 1 3 2 6 6 3 3 5
1 1 1 3 2 6 6 3 3 5
1 1 1 3 2 6 6 3 3 5

なお,random.seed(引数) の引数を省略した場合は,実行時点におけるシステム時刻を用いて乱数生成器が初期化されるので,実行する度に異なる乱数列が得られる.

サイコロの目:乱数生成器をシステム時刻で初期化# 乱数のシードを初期化する(引数を与えなければ,実行時点でのシステム時刻で初期化される)
random.seed()
n = 10
for i in range(n):
    die = random.randint(1,6)
    print(die, end=" ")
1 4 2 6 2 4 3 4 1 2
3 4 3 5 1 6 2 5 4 1
3 4 2 6 5 4 1 3 2 3

目次に戻る