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

Ale*_*eue 3 python random numpy

如果我为我的 RNG 设置了一个种子,例如numpy.random.seed(0)我调用了一个子模块,RNG 的状态会被保持吗?

例如

# some_lib.py
def do_thing():
  return numpy.random.rand()
Run Code Online (Sandbox Code Playgroud)
# parent module
import some_lib
numpy.seed(0)
...
some_lib.do_thing()
Run Code Online (Sandbox Code Playgroud)

父级设置的 numpy 状态会被子级使用吗?

Sha*_*ger 5

种子是 的所有用途的全局值numpy。因此,只要子模块不重新为其设定种子,或不确定地从中提取值(根据推进旧的有效地将其调整为新种子),则种子将被保留。

大多数 PRNG 库的行为都是这样,因为替代方案非常无用;对于可重复的测试,您希望能够设置一次种子,并让一切都依赖于那个稳定的种子。如果存在每个模块的种子,则测试模块无法为被测试模块使用的 PRNG 设置种子。

  • Python 的设计有所帮助。导入的模块是单例的,在不同的地方重新导入会返回对同一模块的引用。 (2认同)