python之np.random.seed()

最近在学习过程中总是遇到np.random.seed()这个问题,网上注释大多数是np.random.seed(0) # 先定义一个随机数种子,但依然有很多变体。

1.什么是随机数种子?

意义:给我们将要使用的、随机生成的数赋予一个初值,之后按照此初值按照固定的顺序生成随机数。

  • 来个第一个示例理解一下。

import numpy as np
np.random.seed(0)  # 先定义一个随机数种子
print(np.random.rand(5))  # "随机"生成5个数

结果如下:

  • 再看第二个示例

import numpy as np
np.random.seed(0)  # 先定义一个随机数种子
print(np.random.rand(5))  # "随机"生成5个数
print(np.random.rand(5))  # 再"随机"生成5个数

结果如下:
python之np.random.seed()_第1张图片

  • 最后看第三个示例

import numpy as np
np.random.seed(0)  # 先定义一个随机数种子
print(np.random.rand(5))  # "随机"生成5个数
print(np.random.rand(5))  # 再"随机"生成5个数

np.random.seed(0)
for i in range(7):
    print(np.random.random())  # "随机"生成7个数

结果如下:
python之np.random.seed()_第2张图片

观察结果,不难发现,第三个code的结果是将我们前面随机生成的随机数显示了出来,并没有自己生成随机数,是一种伪随机。

2.np.random.seed()中的参数

先看一段示例

import numpy as np

np.random.seed(0)
print(np.random.rand(2, 3))

np.random.seed(2)
print(np.random.rand(3, 3))

np.random.seed(2)
print(np.random.rand(2, 3))

结果如下
python之np.random.seed()_第3张图片

将括号中的参数随意换成0,1等,观察结果就会发现,参数本身并没有多大意义,其作用可以看成是一个初值标志。每次参数一样的话,就会生成一个固定的初值。

3.使用方法

每次生成随机数之前都需要调用一下:np.random.seed(0),其中参数0可以换成任意数字。

  • 先给出错误示范:
import numpy as np
np.random.seed(1)        #只在第一次调用了,但是需要进行两次随机数的生成

L1 = np.random.randn(3, 3)
L2 = np.random.randn(3, 3)
print(L1)
print(L2)
[[ 1.62434536 -0.61175641 -0.52817175]
 [-1.07296862  0.86540763 -2.3015387 ]
 [ 1.74481176 -0.7612069   0.3190391 ]]
[[-0.24937038  1.46210794 -2.06014071]
 [-0.3224172  -0.38405435  1.13376944]
 [-1.09989127 -0.17242821 -0.87785842]]

  • 正确使用如下:
import numpy as np

np.random.seed(1)          #每次使用前调用一下
L1 = np.random.randn(3, 3)
np.random.seed(1)           # #每次使用前调用一下
L2 = np.random.randn(3, 3)
print(L1)
print(L2)
[[ 1.62434536 -0.61175641 -0.52817175]
 [-1.07296862  0.86540763 -2.3015387 ]
 [ 1.74481176 -0.7612069   0.3190391 ]]
[[ 1.62434536 -0.61175641 -0.52817175]
 [-1.07296862  0.86540763 -2.3015387 ]
 [ 1.74481176 -0.7612069   0.3190391 ]]

你可能感兴趣的:(python,numpy,开发语言)