18

numpy.random.seed()たとえばnumpy.random.seed(1)、の中にさまざまな数字を入れることができることに気付きましたnumpy.random.seed(101)。異なる数字は何を意味しますか?数字はどのように選んでいますか?

4

7 に答える 7

0

ランダム シードの意味を理解するには、最初に「疑似乱数」数列を理解する必要があります。これは、値が決定論的アルゴリズムを使用して計算されるためです。

したがって、この数値は、乱数発生器から取得する次の数値を計算するための開始値と考えることができます。ここに同じ値を入れると、プログラムは毎回同じ「ランダム」値を取得するようになるため、プログラムは決定論的になります。

この投稿で述べたように

それら (numpy.randomおよびrandom.random) はどちらもメルセンヌ ツイスター シーケンスを使用して乱数を生成し、どちらも完全に決定論的です。つまり、いくつかの重要な情報を知っていれば、次に来る数を絶対確実に予測することができます。

ランダム性が本当に気になる場合は、ユーザーにノイズ (いくつかの任意の単語) を生成するように依頼するか、単にシステム時間をシードとして入れてください。

コードが Intel CPU (または最新のチップを搭載した AMD) で実行される場合は、CPU 命令を使用して「真の」(ハードウェア) ランダム性を収集するRdRandパッケージを確認することもお勧めします。rdrand

参照:

  1. ランダムシード
  2. 乱数の生成に関するシードとは
于 2016-04-25T17:38:00.927 に答える
0

基本的に、数値は毎回同じ「ランダム性」を保証します。

より正確には、数値はシードであり、整数、任意の長さの整数の配列 (またはその他のシーケンス)、またはデフォルト (なし) にすることができます。シードが指定されていない場合、random は利用可能な場合は /dev/urandom からデータを読み取ろうとし、そうでない場合はクロックからシードを作成しようとします。

編集:正直なところ、プログラムが非常に安全である必要がない限り、何を選んでも問題ありません。このような場合は、これらの方法を使用しないでください。暗号的に安全な疑似乱数ジェネレーターが必要な場合は、os.urandom()またはを使用してください。SystemRandom

ここで理解すべき最も重要な概念は、疑似ランダム性です。この考え方を理解したら、プログラムにシードなどが本当に必要かどうかを判断できます。ここを読むことをお勧めします。

于 2016-04-25T17:21:44.253 に答える