zoukankan      html  css  js  c++  java
  • [转]怎样理解随机种子

    转载:

    https://www.cnblogs.com/subic/p/8454025.html

    https://blog.csdn.net/youhuakongzhi/article/details/90572969


    在使用numpy时,难免会用到随机数生成器。我一直对np.random.seed(),随机数种子搞不懂。很多博客也就粗略的说,利用随机数种子,每次生成的随机数相同。

    我有两个疑惑:1, 利用随机数种子,每次生成的随机数相同。这是什么意思?

           2,随机数种子的参数怎么选择?在别人的代码中经常看到np.random.seed(Argument),这个参数不一样,有的是0,有的是1,当然还有其他数。那这个参数应该怎么选择呢?

    通过对别的博客的理解,我做了以下几组实验:

    1.以np.random.randn()函数为例

    结果:

     

    通过该实验我们可以得到以下结论:

    1.1.可以看出,像http://blog.csdn.net/linzch3/article/details/58220569这篇博客中提到的,np.random.seed()对后面的随机数一次有效,而不是一直有效,这种说法是错误的。

    两次利用随机数种子后,即便是跳出循环后,生成随机数的结果依然是相同的。第一次跳出while循环后,进入第二个while循环,得到的两个随机数组确实和加了随机数种子不一样。但是,后面的加了随机数种子的,八次循环中的结果和前面的结果是一样的。说明,随机数种子对后面的结果一直有影响。同时,加了随机数种子以后,后面的随机数组都是按一定的顺序生成的。

    np.random.seed(1)为例:

     首先输入np.random.seed(1),生成两个(1,5)的数组,只要你不再次输入np.random.seed(1),那么一直会随机的产生数据,当再次输入np.random.seed(1)时,数据和第一次np.random.seed(1)后产生的数据相同,也就是说只要输入np.random.seed(1)相当于从这串随机数的第一个位置重新开始

    1.2.在同样的随机种子后第六次的随机数生成结果,(结果高亮部分),两行五列的数组和两个一行五列的数组结果相同。说明,在生成多行随机数组时,是由单行随机数组组合而成的。

    现在我们回答了第一个疑惑:利用随机数种子,每次生成的随机数相同。这是什么意思? --就是使后面的随机数按一定的顺序生成

    2.

     

    你可以实验,在你的电脑上,当随机数种子参数为0和1时,生成的随机数和我上面高亮的结果相同。说明该参数指定了一个随机数生成的起始位置。每个参数对应一个位置。并且在该参数确定后,其后面的随机数的生成顺序也就确定了。

    所以,现在我们回答了我的第二个疑问:随机数种子的参数怎么选择?我认为随意,这个参数只是确定一下随机数的起始位置。

     

    随机数是序列,这个序列根据算法计算而来。这个算法有参数,给定一个参数就会产生相应的序列,不同的参数产生不同的序列。不指定随机种子时,将按照一个序列(即默认的某一个参数)依次往下生成随机数,所以每次调用random()都生成不同的随机数。当指定随机数种子时,随机种子的参数确定相应的序列(不指定参数的话还是默认序列),在这个种子作用范围内,调用random()将按照这个序列生成随机数。再次启动程序,即再次进入这个种子时,还按照这个序列从头开始生成随机数。

    种子发芽长成树,不同的种子长成不同的树。再次种下这个种子(重启程序),还长这棵树。所以叫种子。很形象。

  • 相关阅读:
    遗传算法
    模拟退火算法
    分支限界法(一)(转)
    (操作Excel 2007以後)Open XML SDK 2.0 for Microsoft Office
    c#接口和抽象类的区别
    抽象工厂模式
    乐在其中设计模式(C#)系列文章索引
    VB6.0 生成 XML方法
    处理一些简单的客户端脚本(2)
    抽象类
  • 原文地址:https://www.cnblogs.com/rinroll/p/11985736.html
Copyright © 2011-2022 走看看