np.random.seed()随机数种子 您所在的位置:网站首页 可以生成随机数的app np.random.seed()随机数种子

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

2023-10-06 04:24| 来源: 网络整理| 查看: 265

np.random.seed()随机数种子 np.random.seed()随机数种子1.随机数种子的理解2.np.random.seed()的参数

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

随机数种子!以下均为个人理解,有误及时修改 在生成随机数时,我们可以利用随机数种子,控制生成的随机数。什么意思,就是说我可以利用随机数种子,得到相同的或部分形同的随机数。

1.随机数种子的理解

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

看例子吧: (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个吗!

(2)再来看一个例子

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]]

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

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

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

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

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)

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))

结果:这个例子也证实了上一小节的总结(2)

[[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]]

最后!!!,这个参数好像是随便取的,可以认为是初值的标志,每次按照这个标志都可以得到相同的初值。但是这个参数好像必须是int类型吧。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有