196

私はrandom.seed()Pythonで何をするのか少し混乱しています。たとえば、以下の試行が (一貫して) 行うことはなぜですか?

>>> import random
>>> random.seed(9001)
>>> random.randint(1, 10)
1
>>> random.randint(1, 10)
3
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
6
>>> random.randint(1, 10)
7

これに関する適切なドキュメントが見つかりませんでした。

4

12 に答える 12

237

疑似乱数ジェネレーターは、値に対して何らかの操作を実行することによって機能します。通常、この値は、ジェネレーターによって生成された以前の数値です。ただし、ジェネレーターを初めて使用するときは、以前の値はありません。

疑似乱数ジェネレーターをシードすると、最初の「前の」値が与えられます。各シード値は、特定の乱数ジェネレーターに対して生成された一連の値に対応します。つまり、同じシードを 2 回指定すると、同じ数列が 2 回取得されます。

一般に、乱数ジェネレーターに、プログラムの実行ごとに変更される値をシードする必要があります。たとえば、現在の時刻は頻繁に使用されるシードです。これが自動的に行われない理由は、必要に応じて、特定のシードを指定して既知の数列を取得できるようにするためです。

于 2014-03-25T15:52:57.770 に答える
99

他のすべての回答は、random.seed() の使用を説明していないようです。以下は簡単な例です ( source ):

import random
random.seed( 3 )
print "Random number with seed 3 : ", random.random() #will generate a random number 
#if you want to use the same random number once again in your program
random.seed( 3 )
random.random()   # same random number as before
于 2015-07-28T18:01:07.107 に答える
9

この場合、ランダムは実際には疑似ランダムです。シードが与えられると、均等に分布する数値が生成されます。ただし、同じシードを使用すると、毎回同じ数列が生成されます。変更したい場合は、シードを変更する必要があります。多くの人は、現在の時刻などに基づいてシードを生成することを好みます。

于 2014-03-25T15:52:00.203 に答える
5

乱数のセットを生成するseed(x)前に を設定し、同じシードを使用して同じ乱数のセットを生成します。問題を再現する場合に役立ちます。

>>> from random import *
>>> seed(20)
>>> randint(1,100)
93
>>> randint(1,100)
88
>>> randint(1,100)
99
>>> seed(20)
>>> randint(1,100)
93
>>> randint(1,100)
88
>>> randint(1,100)
99
>>> 
于 2019-02-28T12:15:22.777 に答える
3

これが私の理解です。シード値を設定するたびに、「ラベル」または「参照」が生成されます。次の random.function 呼び出しはこの「ラベル」に関連付けられるため、次回同じシード値と random.function を呼び出すと、同じ結果が得られます。

np.random.seed( 3 )
print(np.random.randn()) # output: 1.7886284734303186

np.random.seed( 3 )
print(np.random.rand()) # different function. output: 0.5507979025745755

np.random.seed( 5 )
print(np.random.rand()) # different seed value. output: 0.22199317108973948
于 2018-05-24T03:09:52.730 に答える
1

メソッドに同じ引数を与えるseed()と同じ疑似乱数の結果が生じることを示す小さなテストを次に示します。

# testing random.seed()

import random

def equalityCheck(l):
    state=None
    x=l[0]
    for i in l:
        if i!=x:
            state=False
            break
        else:
            state=True
    return state


l=[]

for i in range(1000):
    random.seed(10)
    l.append(random.random())

print "All elements in l are equal?",equalityCheck(l)
于 2016-05-23T01:56:32.417 に答える