如何使用numpy的种子创建确定性随机数生成器?

11

我理解的语法是

In[88]: np.random.seed(seed=0)

In[89]: np.random.rand(5) < 0.8
Out[89]: array([ True,  True,  True,  True,  True], dtype=bool)
In[90]: np.random.rand(5) < 0.8
Out[90]: array([ True,  True, False, False,  True], dtype=bool)

然而,当我运行rand()时,得到的结果却不同。我是否遗漏了设置种子函数的某些东西?


5
是的;如果你希望每次得到相同的结果,就需要在调用 np.random 之间调用 seed。它已经是确定性的,但这并不意味着你每次调用 np.random 都会得到相同的结果。 - jonrsharpe
1
这也可能对您有用:np.random.seed()np.random.RandomState()之间的区别 - askewchan
1个回答

12

想象一台发电机:

def gen(start):
    while True:
        start += 1
        yield start

它将持续从您所插入的数字中生成下一个数字。对于种子,它几乎是相同的概念。我尝试设置一个变量来生成数据,并且其中的位置仍然被保存。让我们把这个实践起来:

>>> generator = gen(5)
>>> generator.next()
6
>>> generator.next()
7

如果您想要重新启动,您需要同时重新启动发电机:

>>> generator = gen(5)
>>> generator.next()
6

和numpy对象的想法相同。如果您希望随时间推移获得相同的结果,则需要使用相同的参数重新启动生成器。

>>> np.random.seed(seed=0)
>>> np.random.rand(5) < 0.8
array([ True,  True,  True,  True,  True], dtype=bool)
>>> np.random.rand(5) < 0.8
array([ True,  True, False, False,  True], dtype=bool)
>>> np.random.seed(seed=0) # reset the generator!
>>> np.random.rand(5) < 0.8
array([ True,  True,  True,  True,  True], dtype=bool)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接