我想知道在函数内部和外部执行np.random.seed()
的区别。比如...
np.random.seed(1)
def coin_toss():
if np.random.randint(0,2) == 1:
return 'HEAD'
else:
return 'TAIL'
for value in range (10):
print(coin_toss())
其输出为
HEAD
HEAD
TAIL
TAIL
HEAD
HEAD
HEAD
HEAD
HEAD
TAIL
另一方面,当我将np.random.seed(1)放入函数中时,我得到了不同的输出。
def coin_toss2():
np.random.seed(1)
if np.random.randint(0,2) == 1:
return 'HEAD'
else:
return 'TAIL'
for value in range(10):
print(coin_toss2())
其输出为
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
HEAD
由于种子1在两个例子中是相同的,我希望得到相同的结果。是什么差异导致了输出的差异?有人能解释一下吗?我刚刚明白,在随机状态下也有全局和局部的概念。但我还是不明白为什么会有这种差异。
2条答案
按热度按时间r55awzrz1#
因此,一旦设置了一个种子并且从不手动更新它,以下随机操作总是在以前的值上生成。这就是你的第一个代码所做的。
与第二个代码一样,每次调用random之前都要重置种子值。它合理地生成相同的值,因为它们的种子都是相同的。
hi3rlvi22#
注意测试全局与系统中的本地行为,可能与您预期的不同:https://github.com/lineality/random_seed_testing_python_empirical_coding