通过numpy.random.seed设置的随机种子是否在子模块之间维护?

时间:2019-03-04 23:28:08

标签: python numpy random

如果我为RNG设置了种子,例如 switch (subArea) { // Skipping regular cases with string literals case string dummy when subArea.StartsWith("3*") || subArea.StartsWith("03*"): return "123"; default: return "ABCXYZ123"; } ,我叫一个子模块,RNG的状态会保持吗?

例如

numpy.random.seed(0)
# some_lib.py
def do_thing():
  return numpy.random.rand()

孩子会使用父母设置的numpy状态吗?

2 个答案:

答案 0 :(得分:3)

种子是numpy所有用途的全局值。因此,只要子模块不重新设定其种子状态,或不确定地从其获取值(在推进旧模块的基础上有效地将其调整为新种子),则该种子将被保留。

大多数PRNG库都是以这种方式运行的,因为替代方法几乎没有用。对于可重现的测试,您想要能够设置一次种子,并使所有内容都依赖于该稳定的种子。如果存在每个模块的种子,则测试模块无法为被测试模块使用的PRNG注入种子。

答案 1 :(得分:1)

在测试中,似乎numpy的RNG状态由子进程维护。