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

时间:2015-09-27 15:37:27

标签: python numpy random

据我所知,语法是

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()时,我会得到不同的结果。是否有种子功能缺少的东西?

1 个答案:

答案 0 :(得分:7)

想想一个发电机:

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)