jrs*_*rsh 4 python random scope numpy
我的问题与Python中的随机种子的作用范围有关?。在上述问题的情况下,需要说明的是Random(),模块中存在(隐藏的)全局实例random。
1)我想澄清一下是否在一个模块中设置随机种子会导致它成为其他模块中的随机种子,以及是否需要注意某些事项。
例如:给定:moduleA.py,moduleB.py
moduleA.py:
import random
import moduleB
random.seed(my_seed)
moduleB.randomfct()
Run Code Online (Sandbox Code Playgroud)
moduleB.py:
import random
def randomfct():
#do_things_using_random
Run Code Online (Sandbox Code Playgroud)
moduleB是否也使用my_seed,还是必须将种子传递给moduleB.py并再次设置?
2)设置随机种子/导入的顺序是否起作用?
例如在moduleA.py:
import random
random.seed(my_seed)
import moduleB
Run Code Online (Sandbox Code Playgroud)
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)方法。因此,种子状态在整个程序中共享。random.seed(a)
1)是的。moduleA并moduleB使用相同的种子 导入random在moduleA创建全局random.Random()对象。重新导入它moduleB只会为您提供相同的模块并维护最初创建的random.Random()对象。
2)否。您提供的示例中没有,但是总的来说很重要。您可以moduleB在设置种子之前使用,moduleA这样就不会设置种子。
3)很难说。更复杂的代码库。也就是说,我认为它的工作方式相同。numpy的作者确实必须尝试使其工作方式不同于python实现中的工作方式。
通常,如果您担心种子状态,建议您创建自己的随机对象并将其传递以生成随机数。
| 归档时间: |
|
| 查看次数: |
1031 次 |
| 最近记录: |