np.random.seed做什么?

np.random.seed(0)

当前回答

Numpy文档中有一个很好的解释: https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.random.RandomState.html 它指的是梅森扭扭伪随机数发生器。关于算法的更多细节,请访问:https://en.wikipedia.org/wiki/Mersenne_Twister

其他回答

设置特定种子值后产生的所有随机数在所有平台/系统中都是相同的。

上面的所有答案都展示了np.random.seed()在代码中的实现。我会尽量简单地解释为什么会发生这种情况。计算机是基于预先定义的算法设计的机器。计算机的任何输出都是对输入执行算法的结果。所以当我们要求计算机生成随机数时,当然它们是随机的,但计算机并不是随机产生的!

因此,当我们编写np.random.seed(any_number_here)时,算法将输出一个特定的数字集,该数字集对参数any_number_here是唯一的。这就好像我们传递正确的参数就能得到一组特定的随机数。但这需要我们知道算法是如何工作的,这很乏味。

因此,例如,如果我写np.random.seed(10),我得到的特定数字集将保持不变,即使我在10年后执行同一行,除非算法改变。

Numpy文档中有一个很好的解释: https://docs.scipy.org/doc/numpy-1.15.1/reference/generated/numpy.random.RandomState.html 它指的是梅森扭扭伪随机数发生器。关于算法的更多细节,请访问:https://en.wikipedia.org/wiki/Mersenne_Twister

随机种子指定计算机生成随机数序列时的起始点。

For example, let’s say you wanted to generate a random number in Excel (Note: Excel sets a limit of 9999 for the seed). If you enter a number into the Random Seed box during the process, you’ll be able to use the same set of random numbers again. If you typed “77” into the box, and typed “77” the next time you run the random number generator, Excel will display that same set of random numbers. If you type “99”, you’ll get an entirely different set of numbers. But if you revert back to a seed of 77, then you’ll get the same set of random numbers you started with.

例如,“取一个数x,加上900 +x,然后减去52。”为了使进程开始,您必须指定一个起始数字x(种子)。让我们以77为例:

900 + 77 = 977 减去52 = 925 按照相同的算法,第二个“随机”数将是:

900 + 925 = 1825 减去52 = 1773 这个简单的例子遵循一个模式,但是计算机数字生成背后的算法要复杂得多

我希望给出一个非常简短的答案:

种子使(下一个系列)随机数可预测。你可以认为每次调用seed之后,它都预先定义了序列号numpy random保留了它的迭代器,然后每次你得到一个随机数它就会调用get next。

例如:

np.random.seed(2)
np.random.randn(2) # array([-0.41675785, -0.05626683])
np.random.randn(1) # array([-1.24528809])

np.random.seed(2)
np.random.randn(1) # array([-0.41675785])
np.random.randn(2) # array([-0.05626683, -1.24528809])

您可以注意到,当我设置相同的种子时,无论每次从numpy请求多少个随机数,它总是给出相同的数字序列,在本例中是数组([-0.41675785,-0.05626683,-1.24528809])。