Python 使用numpy.random.seeds(0)时会出现奇怪的结果?

Python 使用numpy.random.seeds(0)时会出现奇怪的结果?,python,numpy,random,tensorflow,Python,Numpy,Random,Tensorflow,在使用numpy.random.seed(0)获得可复制的结果时,我发现了一些奇怪的东西 import numpy as np def a(): print('a', np.random.rand()) b() def b(): print('b', np.random.rand()) c() def c(): print('c', np.random.rand()) np.random.seed(0) a() 结果是: a 0.548813503927

在使用numpy.random.seed(0)获得可复制的结果时,我发现了一些奇怪的东西

import numpy as np
def a():
    print('a', np.random.rand())
    b()
def b():
    print('b', np.random.rand())
    c()
def c():
    print('c', np.random.rand())
np.random.seed(0)
a()
结果是:

a 0.5488135039273248
b 0.7151893663724195
c 0.6027633760716439
如果我将代码更改为:

import numpy as np
def a():
    np.random.seed(0)
    print('a', np.random.rand())
    b()
    print('aa', np.random.rand())
def b():
    np.random.seed(0)
    print('b', np.random.rand())
    c()
def c():
    np.random.seed(0)
    print('c', np.random.rand())

a()
结果如下:

a 0.5488135039273248
b 0.5488135039273248
c 0.5488135039273248
aa 0.7151893663724195

这真的很奇怪,我用tensorflow来训练我的金融序列预测模型,我想得到可重复的结果。似乎每次使用随机函数之前都需要调用np.random.seeds()。有谁有更好的解决方案吗?

您在每次呼叫之前都要重新初始化rng的种子。rng的工作方式是在初始化种子后给出“随机”数。在您的例子中,由于种子总是相同的,它每次只会给您序列的第一个值

def b():
     np.random.seed(0)
     print('b', np.random.rand())
     c()
我认为这是一个复制粘贴错误,因为在第一个示例中,您的操作是正确的。无论如何,这里你有一些关于rng的信息


初始化始终具有相同“随机”数列表的随机生成器。在您的代码中,您可以在每个过程中初始化生成器。但当你打印aa时,你的生成器会跳转到另一个数字。

你觉得这里有什么奇怪的地方?你期待的是什么?为什么会奇怪?这就是伪随机发生器的工作原理。谢谢。显然我对随机种子有误解。
random.seed(int)