为什么 `seed()` 方法不是 `randint()` 函数的一部分?

Why `seed()` method isn't part of `randint()` function?

看来我对Numpy随机方法和函数了解不够。从未见过像这个简单示例中那样链接到函数的方法:

seed(4)

randint(0,10,10)

...其中 seed()randint()

调用

我想知道:

  1. 为什么 seed 不是 randint 函数的一部分作为关键字参数?
  2. 这种创建 Nupy 函数的想法是什么?

randint 不是 numpy 中唯一的随机 number/sequence 生成器,还有其他过多的随机函数,每次将种子传递给程序中的不同函数没有多大意义,相反,你初始化种子状态一次,然后它被用于所有随机函数。

种子用于确定 RNG 结果的序列。像这样:

In [1]: import numpy

In [2]: numpy.random.seed(4)

In [3]: numpy.random.randint(0, 10, 10)
Out[3]: array([7, 5, 1, 8, 7, 8, 2, 9, 7, 7])

In [4]: numpy.random.randint(0, 10, 10)
Out[4]: array([7, 9, 8, 4, 2, 6, 4, 3, 0, 7])

In [5]: numpy.random.randint(0, 10, 10)
Out[5]: array([5, 5, 9, 6, 6, 8, 2, 5, 8, 1])

In [6]: numpy.random.randint(0, 10, 10)
Out[6]: array([2, 7, 0, 8, 3, 1, 0, 3, 2, 3])

In [7]: numpy.random.seed(4)

In [8]: numpy.random.randint(0, 10, 10)
Out[8]: array([7, 5, 1, 8, 7, 8, 2, 9, 7, 7])

In [9]: numpy.random.randint(0, 10, 10)
Out[9]: array([7, 9, 8, 4, 2, 6, 4, 3, 0, 7])

In [10]: numpy.random.randint(0, 10, 10)
Out[10]: array([5, 5, 9, 6, 6, 8, 2, 5, 8, 1])

In [11]: numpy.random.randint(0, 10, 10)
Out[11]: array([2, 7, 0, 8, 3, 1, 0, 3, 2, 3])

看看在第二次 seed 调用后(在线 In [7]),序列是如何重置的?

当您设置种子时,RNG 输出仍然具有相同的统计属性,但您可以使用相同的种子再次 运行 程序并获得相同的结果。这对于调试或可重现的模拟等事情很有用。


如果 seedrandint 的一部分,那么每次都会重置序列。它看起来像这样:

In [12]: numpy.random.seed(4)

In [13]: numpy.random.randint(0, 10, 10)
Out[13]: array([7, 5, 1, 8, 7, 8, 2, 9, 7, 7])

In [14]: numpy.random.seed(4)

In [15]: numpy.random.randint(0, 10, 10)
Out[15]: array([7, 5, 1, 8, 7, 8, 2, 9, 7, 7])

In [16]: numpy.random.seed(4)

In [17]: numpy.random.randint(0, 10, 10)
Out[17]: array([7, 5, 1, 8, 7, 8, 2, 9, 7, 7])

In [18]: numpy.random.seed(4)

In [19]: numpy.random.randint(0, 10, 10)
Out[19]: array([7, 5, 1, 8, 7, 8, 2, 9, 7, 7])

每次调用的结果相同。每次调用都产生相同的结果不是我们希望 RNG 输出的行为方式。