• 1.总体说明:
    numpy.random.seed()中每一个数字代表一种随机数生成规则,当种子数确定后,每次调用numpy.random下的随机函数时,都会根据该种子数对应的规则,依次生成随机数或随机数组;
    当第二次指定相同的种子数时,每次调用numpy.random下的随机函数,会依次生成跟上一次指定种子数再调用随机函数时,相同的随机数或随机数组,即两次随机数(组)生成结果依次一一对应;
    当不指定种子数时,每次调用numpy.random下的随机函数,numpy会随机指定一个种子数,即随机地采用该种子数所对应的规则,生成随机数或随机数组,所以生成结果每次不同。

  • 2.下面给出测试代码:

import numpy as np
import pandas as pd
import matplotlib.pyplot as pltfreq = 'D'
t0 = '2020-01-01'
data_length = 28
num_ts = 2
period = 14
different_type = 'no_seed'  # one of 'no_seed', 'seed_outside_loop', 'seed_before_every_random'if different_type == 'no_seed':series = []for k in range(num_ts):level = 10 * np.random.rand()print(level/10)seas_amplitude = 0.1 + 0.3*np.random.rand()print((seas_amplitude - 0.1) / 0.3)time_ticks = np.array(range(data_length))source = level + seas_amplitude*np.sin(time_ticks*(2*np.pi)/period)noise = 0.1*np.random.randn(data_length)print(noise/0.1)data = source + noiseindex = pd.date_range(t0, periods=data_length, freq='D')series.append(pd.Series(data=data, index=index))series[k].plot()plt.title('no_seed')plt.show()series = []for k in range(num_ts):level = 10 * np.random.rand()print(level/10)seas_amplitude = 0.1 + 0.3*np.random.rand()print((seas_amplitude - 0.1) / 0.3)time_ticks = np.array(range(data_length))source = level + seas_amplitude*np.sin(time_ticks*(2*np.pi)/period)noise = 0.1*np.random.randn(data_length)print(noise/0.1)data = source + noiseindex = pd.date_range(t0, periods=data_length, freq='D')series.append(pd.Series(data=data, index=index))series[k].plot()plt.title('no_seed')plt.show()elif different_type == 'seed_outside_loop':np.random.seed(0)series = []for k in range(num_ts):level = 10 * np.random.rand()print(level / 10)seas_amplitude = 0.1 + 0.3 * np.random.rand()print((seas_amplitude - 0.1) / 0.3)time_ticks = np.array(range(data_length))source = level + seas_amplitude * np.sin(time_ticks * (2 * np.pi) / period)noise = 0.1 * np.random.randn(data_length)print(noise / 0.1)data = source + noiseindex = pd.date_range(t0, periods=data_length, freq='D')series.append(pd.Series(data=data, index=index))series[k].plot()plt.title('seed_outside_loop')plt.show()np.random.seed(0)series = []for k in range(num_ts):level = 10 * np.random.rand()print(level / 10)seas_amplitude = 0.1 + 0.3 * np.random.rand()print((seas_amplitude - 0.1) / 0.3)time_ticks = np.array(range(data_length))source = level + seas_amplitude * np.sin(time_ticks * (2 * np.pi) / period)noise = 0.1 * np.random.randn(data_length)print(noise / 0.1)data = source + noiseindex = pd.date_range(t0, periods=data_length, freq='D')series.append(pd.Series(data=data, index=index))series[k].plot()plt.title('seed_outside_loop')plt.show()elif different_type == 'seed_before_every_random':series = []for k in range(num_ts):np.random.seed(0)level = 10 * np.random.rand()print(level / 10)np.random.seed(0)seas_amplitude = 0.1 + 0.3 * np.random.rand()print((seas_amplitude - 0.1) / 0.3)time_ticks = np.array(range(data_length))source = level + seas_amplitude * np.sin(time_ticks * (2 * np.pi) / period)np.random.seed(0)noise = 0.1 * np.random.randn(data_length)print(noise / 0.1)data = source + noiseindex = pd.date_range(t0, periods=data_length, freq='D')series.append(pd.Series(data=data, index=index))series[k].plot()plt.title('seed_before_every_random')plt.show()series = []for k in range(num_ts):np.random.seed(0)level = 10 * np.random.rand()print(level / 10)np.random.seed(0)seas_amplitude = 0.1 + 0.3 * np.random.rand()print((seas_amplitude - 0.1) / 0.3)time_ticks = np.array(range(data_length))source = level + seas_amplitude * np.sin(time_ticks * (2 * np.pi) / period)np.random.seed(0)noise = 0.1 * np.random.randn(data_length)print(noise / 0.1)data = source + noiseindex = pd.date_range(t0, periods=data_length, freq='D')series.append(pd.Series(data=data, index=index))series[k].plot()plt.title('seed_before_every_random')plt.show()else:print('different_type must be one of \'no_seed\', \'seed_outside_loop\', \'seed_before_every_random\'')
  • 3.运行结果说明:

  • 3.1.当不设置种子数seed时:


    以上两图中序列图曲线的颜色(上图)和生成曲线的随机数(组)的选框颜色(下图)一一对应,可以看到,当different_type == ‘no_seed’,即不指定种子数时,2个if每个if生成2条序列,共4条序列,组成这4条序列的随机数和随机数组均不相同,所以4条曲线均不相同。这是因为每次调用np.random生成随机数和随机数组时,numpy都会随机指定一个seed,即随机指定一种随机数生成方式,所以每次生成的随机数(组)也不相同。

  • 3.2.当循环外指定相同的种子数时:

    以上两图中序列图曲线的颜色(上图)和生成曲线的随机数(组)的选框颜色(下图)一一对应,可以看到,当different_type == ‘seed_outside_loop’,即循环外指定相同的种子数时,2个if每个if生成2条序列,共4条序列,两两重合:if内的两条序列不同,if间的两组序列依次对应相同。这是因为在指定一个seed后,调用np.random的随机函数会依该规则,依次生成随机数和随机数组;重新指定这个seed后,调用np.random的随机函数又会依该规则,重头依次生成随机数和随机数组;所以此时if内的随机数和随机数组依次不同,if间对应位置的随机数和随机数组依次相同。

  • 3.3.当每一个随机函数前都指定相同的种子数时:


    以上两图中序列图曲线的颜色(上图)和生成曲线的随机数(组)的选框颜色(下图)一一对应,可以看到,当different_type == ‘seed_before_every_random’,即每次调用np.random时都指定相同的seed时,2个if每个if生成2条序列,共4条序列,组成这4条序列的随机数和随机数组均相同,所以4条曲线重合。这是因为每次调用np.random生成随机数和随机数组时seed都相同,即都是用相同的规则生成随机数,相当于每次都是从seed=0的这个随机数池中选出第一个或第一组随机数,所以4个红色方框中的随机数(组)都相同,4条曲线均相同。

  • 4.总结
    当我们需要构造一些具有特定规律或特征的数据去测试某些函数或算法时,通常需要用到np.random下的随机数函数来生成数据;此时通常需要让某些数据重新或者不重现,或者以某种频率和次序重现,就需要灵活使用seed。

numpy.random.seed()用法详解相关推荐

  1. numpy.random.choice()用法详解(附官方文档)

    numpy.random.choice numpy官方文档:https://numpy.org/devdocs/reference/random/generated/numpy.random.choi ...

  2. numpy.random.rand使用详解

    http://blog.csdn.net/you_are_my_dream/article/details/53494801 numpy.random.rand numpy.random.rand(d ...

  3. numpy.ix_的用法详解

    import numpy as np x=np.arange(32).reshape((8,4)) print (x[np.ix_([1,5,7,2],[0,3,1,2])]) x的矩阵是: [[ 0 ...

  4. Python的random函数用法详解

    在 random 模块下提供了如下常用函数: random.seed(a=None, version=2):指定种子来初始化伪随机数生成器. random.randrange(start, stop[ ...

  5. 简明扼要:numpy.random.seed()用法

    关于seed()的作用,其他文章给的定义看得一头雾水,代码也完全没说明问题,就自己试了下. 简单几行代码试一下,就明白了: from numpy import * 然后:

  6. numpy.arange()官方用法详解(附numpy官方文档)

    numpy.arange numpy官方说明文档:https://numpy.org/doc/1.18/reference/generated/numpy.arange.html#numpy.aran ...

  7. python的reshape方法_numpy库reshape用法详解

    numpy.reshape(重塑) 给数组一个新的形状而不改变其数据 numpy.reshape(a, newshape, order='C')参数: a:array_like 要重新形成的数组. n ...

  8. python中tile的用法_python3中numpy函数tile的用法详解

    tile函数位于python模块 numpy.lib.shape_base中,他的功能是重复某个数组.比如tile(A,n),功能是将数组A重复n次,构成一个新的数组,我们还是使用具体的例子来说明问题 ...

  9. numpy.random.choice用法

    python,numpy中np.random.choice()的用法详解及其参考代码 处理数据时经常需要从数组中随机抽取元素,这时候就需要用到np.random.choice().然而choice用法 ...

最新文章

  1. 爱好历史的程序员,不容错过!
  2. Linux日常运维--6
  3. html工具提示错误,HTML-KickStart工具提示错误
  4. java前端ajax提交数据_Java 前端使用Ajax通过FormData传递文件和表单数据到后台
  5. android view gesturedetector,如何在Android中利用 GestureDetector进行手势检测
  6. 解决Ubuntu刚装好的时候su命令密码错误的问题
  7. c语言4x4矩形列互换,线反转法4x4键盘C语言程序问题.急...
  8. php不兼容_怎么解决php不兼容问题
  9. ViewPager Kotlin 教程入门
  10. 【PowerJob】值得你拥有的新一代分布式任务调度与计算框架
  11. 应该怎么正确向老板提加薪呢?
  12. Gentoo 安装笔记 2021/8
  13. 惊!成年蚂蚁竟然返老还童!原因居然是。。。。
  14. android中截屏功能实现,android代码实现截屏功能
  15. 【UnityAR相关】Unity Vuforia扫图片成模型具体步骤
  16. 打印魔方阵(C语言)
  17. 电路分析 基尔霍夫定律 详解课堂笔记
  18. FL Studio 教程之扫弦简介
  19. 今生,让我们记住盖茨!
  20. ios-vcf格式通讯录的生成

热门文章

  1. win10查看服务器共享文件夹权限,win10共享文件夹win7没有权限访问的解决教程
  2. win10自启动方法
  3. java判断一个字符串对象是否在一个集合里面
  4. Android 8.0 SystemUI下拉状态栏快捷开关
  5. Git 修改 commit author
  6. session机制详解
  7. 2021外卖返利小程序饿了么美团外卖侠分销系统源码
  8. CS61A Proj 3
  9. 论文介绍 -- Rethinking the Evaluation of Video Summaries
  10. tomcat 多webpp的设置和访问过滤