最近在学习过程中总是遇到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个数
结果如下:
-
最后看第三个示例
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个数
结果如下:
观察结果,不难发现,第三个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))
结果如下
将括号中的参数随意换成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 ]]