np.random.seed() 的用法

np.random.seed() 随机数种子

1. 随机数种子的理解:

相当于我给接下来需要生成的随机数一个初值,按照我给的这个初值,按固定顺序生成随机数。

通俗一点理解为: 随机数种子是给了一批数(随机数种子应该是按一定顺序生成随机数的,并不是一次给了一批数,但如果这些数有固定顺序,我们是不是可以简单认为随机种子给了我们很多数据),当需要生成随机数时,就从这一批数中依次取值。

第一个例子

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个数

从下面的输出结果中,我们可以察觉,“随机”并不是真的随机,是假随机。

# 结果
[0.5488135  0.71518937 0.60276338 0.54488318 0.4236548 ]
[0.64589411 0.43758721 0.891773   0.96366276 0.38344152]

0.5488135039273248
0.7151893663724195
0.6027633760716439
0.5448831829968969
0.4236547993389047
0.6458941130666561
0.4375872112626925

观察结果:下边的 ‘ 随机 ’ 生成的7个数和上边 ‘ 随机 ’ 生成的十个数中的前7个相同。
为什么呢?
因为开始我们设置了一个随机种子,接下来生成的十个数是有固定顺序的(这顺序是什么?i dont know!)。为了方便理解,我们把随机种子看成一个超级超级长的 list ,我们接下来的取随机数操作,( np.random.rand(5) )就是从这个 list 中依次取5个随机数,然后( np.random.rand(5) )再取5个随机数。当然,你说它不是 list 是 数组 ,OK!随你,只是为了方便理解。
为什么后边生成的7个 “随机” 数和之前的前7个数相同呢?
这是因为在生成这7个 ‘随机’ 数之前,又重新定义了一个随机数种子 ( np.random.seed(0) )。定义随机数种子,不就是定义了一个超级超级长的 list 吗 ?,这个 list 和之前的 list 是一样的!!!,所以我们取7个 ‘随机’ 数,不就是这个 list 中的前7个吗!

第二个例子

np.random.seed(0)
for i in range(7):
    print(np.random.random())

np.random.seed(0)
print(np.random.rand(2, 3))
0.5488135039273248
0.7151893663724195
0.6027633760716439
0.5448831829968969
0.4236547993389047
0.6458941130666561
0.4375872112626925

[[0.5488135  0.71518937 0.60276338]
 [0.54488318 0.4236548  0.64589411]]

2 x 3 矩阵的6个数 和 随机生成的前6个数相同!不需要解释了吧,所以如果我想生成两个一样的随机矩阵怎么办?是不是在生成矩阵前,定义随机数种子就好了。

总结:
(1)随机数种子相当于给我们一个初值,之后按照固定顺序生成随机数(也就是我们说的超级长的 list )
(2)随机数种子对后面的结果一直有影响,在一个随机数种子后生成的随机数都受这个随机数种子的影响,即生成的随机数都是由这个随机数种子给的初值,按照固定顺序生成的(生成的随机数受离它最近的随机数种子影响,即它之前的随机数种子)。

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

个人理解:随机数种子给的初值和顺序是一个意思,因为这个顺序并不知道,所以可以认为是由初值决定,也可以理解为生成的超级超级大的 list 。
那这个初值是怎么决定的呢,是np.random.seed()中的参数决定,只要每次这个参数相同,那我们的初值就是相同的,种子就是相同的。
种子相同,之后长得枝条就是相同的: 即 list 是相同的。

例子

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

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

np.random.seed(0)
print(np.random.rand(2, 3))
[[0.5488135  0.71518937 0.60276338]
 [0.54488318 0.4236548  0.64589411]]
 
[[4.17022005e-01 7.20324493e-01 1.14374817e-04]
 [3.02332573e-01 1.46755891e-01 9.23385948e-02]]

[[0.5488135  0.71518937 0.60276338]
 [0.54488318 0.4236548  0.64589411]]

你可能感兴趣的:(python,python,机器学习,numpy)