私は関数とサブ関数を持っており、それぞれにはいくつかのランダムな配列が生成されています。結果を再現可能にするために、私はシードを使用します。しかし、私は奇妙なケースを参照してください。サブ関数によるPythonシード
サブ関数にシードがある場合、メイン関数の乱数もサブ関数のシードから影響を受けます。そして、主機能から副機能への影響はありません。 たとえば、次のコードを考えます。このコードの場合
import random
from random import randint
import numpy as np
def randgene():
a=np.random.randint(0,5,size=5)
print "a in function", a
np.random.seed(seed=15)
b=np.random.randint(0,5,size=5)
print "b in function", b
d=np.random.choice(50, size=5, replace = False)
print "d in function", d
# np.random.seed(seed=None)
def main():
print "d-without seed", np.random.choice(50, size=5, replace = False)
print "a-without seed", np.random.randint(0,5,size=5)
print "b-without seed", np.random.randint(0,5,size=5)
f = randgene()
print "d-without seed", np.random.choice(50, size=5, replace = False)
print "a-without seed", np.random.randint(0,5,size=5)
print "b-without seed", np.random.randint(0,5,size=5)
f = randgene()
print "d-without seed", np.random.choice(50, size=5, replace = False)
print "a-without seed", np.random.randint(0,5,size=5)
print "b-without seed", np.random.randint(0,5,size=5)
np.random.seed(seed=10)
print "d-with seed", np.random.choice(50, size=5, replace = False)
print "a-with seed", np.random.randint(0,5,size=5)
print "b-with seed", np.random.randint(0,5,size=5)
f = randgene()
print "d-with seed", np.random.choice(50, size=5, replace = False)
print "a-with seed", np.random.randint(0,5,size=5)
f = randgene()
print "d-with seed", np.random.choice(50, size=5, replace = False)
print "a-with seed", np.random.randint(0,5,size=5)
if __name__ == '__main__':
main()
私はこの結果を得る:あなたは、私はサブ関数を呼び出した時はいつでもd-with seed [ 8 21 32 39 11], a-with seed [3 0 3 3 0]
は、メイン機能で繰り返し見
d-without seed [14 29 9 42 18]
a-without seed [3 0 0 3 4]
b-without seed [3 2 0 2 1]
a in function [2 3 1 2 3]
b in function [0 4 0 4 3]
d in function [41 16 22 24 14]
d-without seed [ 8 21 32 39 11]
a-without seed [3 0 3 3 0]
b-without seed [1 2 2 1 4]
a in function [4 4 0 2 2]
b in function [0 4 0 4 3]
d in function [41 16 22 24 14]
d-without seed [ 8 21 32 39 11]
a-without seed [3 0 3 3 0]
b-without seed [1 2 2 1 4]
d-with seed [37 23 44 42 47]
a-with seed [2 0 0 4 4]
b-with seed [0 0 2 4 2]
a in function [0 0 2 3 0]
b in function [0 4 0 4 3]
d in function [41 16 22 24 14]
d-with seed [ 8 21 32 39 11]
a-with seed [3 0 3 3 0]
a in function [1 2 2 1 4]
b in function [0 4 0 4 3]
d in function [41 16 22 24 14]
d-with seed [ 8 21 32 39 11]
a-with seed [3 0 3 3 0]
します。どうやら何の繰り返しを持っていない
d-without seed [17 20 23 36 28]
a-without seed [3 1 1 2 0]
b-without seed [3 2 1 1 3]
a in function [1 2 2 0 4]
b in function [4 4 0 4 2]
d in function [ 9 46 19 7 47]
d-without seed [39 42 10 17 4]
a-without seed [2 3 0 2 4]
b-without seed [1 4 1 3 2]
a in function [1 1 3 3 2]
b in function [1 3 4 4 3]
d in function [ 0 2 45 5 19]
d-without seed [24 20 47 3 29]
a-without seed [3 0 3 3 3]
b-without seed [1 0 0 2 3]
d-with seed [37 23 44 42 47]
a-with seed [2 0 0 4 4]
b-with seed [0 0 2 4 2]
a in function [0 0 2 3 0]
b in function [4 4 0 1 1]
d in function [ 6 11 35 4 7]
d-with seed [19 47 43 38 15]
a-with seed [0 4 2 1 2]
a in function [1 2 1 3 2]
b in function [3 4 4 0 2]
d in function [38 31 17 43 2]
d-with seed [ 7 15 39 2 49]
a-with seed [3 4 1 4 0]
:私はサブ機能でラインnp.random.seed(seed=15)
コメント場合 はしかし、私はこの結果を得ます。したがって、メイン関数のシードはサブ関数には影響しません。 np.random.seed(seed=15)
とnp.random.seed(seed=None)
の両方をコメント化しておくと、同様の結果になります。 何か起こっていることを誰かに説明してもらえますか?事前に
おかげで、 アフシン・
シードは、すべての乱数がどんなにところ、それが設定されている_after_生成に影響します。 – DyZ
@DYZありがとう、私はそれを得た。 –