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

unj*_*nj2 6 python random numpy

据我所知,语法是

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)
Run Code Online (Sandbox Code Playgroud)

但是,当我运行时rand(),我会得到不同的结果.是否有种子功能缺少的东西?

Ziz*_*212 7

想想发电机:

def gen(start):
    while True:
        start += 1
        yield start
Run Code Online (Sandbox Code Playgroud)

这将连续从您插入生成器的数字中提供下一个数字.有了种子,它的概念几乎相同.我尝试设置一个变量来生成数据,并且仍保存其中的位置.让我们付诸实践:

>>> generator = gen(5)
>>> generator.next()
6
>>> generator.next()
7
Run Code Online (Sandbox Code Playgroud)

如果要重新启动,还需要重新启动生成器:

>>> generator = gen(5)
>>> generator.next()
6
Run Code Online (Sandbox Code Playgroud)

与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)
Run Code Online (Sandbox Code Playgroud)