Skip to content

toona note

numpy の乱数seed を固定して複数回乱数を生成した場合の挙動を確認

はじめに

乱数の seed を固定した場合、プログラムを何度実行しても同じ乱数が生成されます。
しかし、同一プログラム内で乱数を複数回生成する場合、最初に生成した乱数と次に生成する乱数は一致するとは限りません。

サンプルコード

サンプルとして 2 つのコードを示します。
どちらも目的は同じですが、今は後者のコードが推奨されているようです。
また、どちらも乱数シードは 42 に固定していますが、生成される乱数は異なります。
コードを複数回実行して、常に同じ数値が出力されることを確認してください。


説明

どちらのコードも乱数のシードを固定して 2 回 0~1 の一様乱数を生成するコードです。
実行環境により出力される乱数は異なるかもしれません。

大事な点は

  • コードを何回実行しても出力される 2 つの乱数は変わらない。
  • 1 度実行した際に出力される 2 つの乱数は同一ではない。

の 2 点です。

乱数の seed の設定は、コード内の全てで同じ乱数を生成する設定ではありません。
seed の設定は、あくまで seed の設定です。 複数回呼び出した場合は異なる乱数が生成されます。

おわりに

プログラム内で複数回呼び出しを行った場合の乱数が異なるのは、当然のことだと思っていたのですが、改めて確認しました。

実行環境

  • python: 3.7.10
  • numpy: 1.17.0