gpt4 book ai didi

python - (numpy)随机种子有范围吗?

转载 作者:行者123 更新时间:2023-12-02 07:45:08 26 4
gpt4 key购买 nike

我的问题与What is the scope of a random seed in Python?有关。在上述问题的情况下,可以明确的是,random 模块中有一个(隐藏的)全局 Random() 实例。

1) 我想澄清在一个模块中设置随机种子是否会导致它成为其他模块中的随机种子,以及是否有某些事情需要注意。

例如:给定: moduleA.py, moduleB.py

模块A.py:

import random 
import moduleB
random.seed(my_seed)
moduleB.randomfct()

模块B.py:

import random 
def randomfct():
#do_things_using_random

moduleB 是否也使用 my_seed,还是我必须将种子传递给 moduleB.py 并再次设置?

2)设置随机种子/导入的顺序有什么作用吗?

例如在moduleA.py中:

import random 
random.seed(my_seed)
import moduleB

3)设置 numpy 随机种子也是如此,例如np.random.seed(42)

最佳答案

CPython random.py 实现非常具有可读性。我建议看看:https://github.com/python/cpython/blob/3.6/Lib/random.py

无论如何,该版本的 python 创建了一个全局 random.Random() 对象,并将其直接分配给 random 模块。该对象包含一个 seed(a) 方法,该方法 acts as a module function当您调用random.seed(a)时。因此,种子状态在整个程序中共享。

1) 是的。 moduleAmoduleB 使用相同的种子。在 moduleA 中导入 random 会创建全局 random.Random() 对象。在 moduleB 中重新导入它只会为您提供相同的模块并维护最初创建的 random.Random() 对象。

2)不。在您给出的示例中不是,但总的来说,它可能很重要。在 moduleA 中设置种子之前,您可能会使用 moduleB,因此您的种子尚未设置。

3)很难说。更复杂的代码库。也就是说,我认为它的工作原理是一样的。 numpy 的作者确实必须尝试使其以不同于 python 实现的方式工作。

一般来说,如果您担心种子状态,我建议您创建自己的随机对象并将其传递以生成随机数。

关于python - (numpy)随机种子有范围吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50971213/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com