如何生成指定分布的随机数?两种方法、三行代码


两种方法生成指定分布的随机数

介绍两种方法生成指定分布的随机数:

生成正态分布的随机数方法
统计函数库:scipy.statsscipy.stats.norm.rvs(loc = 0,scale = 0.1,size =10)
数组、矩阵库:numpynumpy.random.normal(loc=0.0, scale=1.0, size=None))

上述俩个库中有相关分布的生成随机数的函数方法,下面以正态分布为例进行详细介绍


1、scipy.stats方法生成正态分布的随机数


★步骤:

  • 导入函数库import scipy.stats as st
    • 设定参数loc = 0,scale = 0.1,size =(2,2)
      • 输出结果print(st.norm.rvs(loc = loc,scale =scale,size =size))

★代码详细解释:

  1. import scipy.stats:导入scipy.stats库;
  2. as st:用 st 表示scipy.stats库;
  3. locscale参数,表示随机变量的偏移缩放,在这里对应正态分布的平均值标准差
  4. size参数,表示生成的大量随机数会储存在什么样的数据空间中,是一维数组呢,还是多维,None表示只生成一个数
  5. st.norm.rvsnorm表示正态分布rvs 表示生成随机数,组合到一起就是生成正态分布的随机数,那么这样就可以替换 norm 从而生成其他指定分布的随机数。

★整理成三行代码:

import scipy.stats as st #导入统计函数库,令其用st表示
loc1= 0;scale1= 0.1;size1=(2,2) #赋予参数值
print(st.norm.rvs(loc=loc1,scale=scale1,size=size1)) #输出结果

结果如下
1
虽然生成了结果,但是可以从图中看出来,结果一和结果二的输出代码是一样的,但是输出结果却是不一样的,这就说明这种方法生成的随机数是在不停地变化的,不信你可以运行多次,每次的结果都会不一样,不过这样也达到了目的却无法让别人重现你的代码结果,那么针对这个问题来看看方法二。


2、numpy方法生成正态分布的随机数


★步骤与方法1类似


★代码详细解释:

  1. import numpy:导入numpy库;
  2. as np:用 np 表示numpy库;
  3. locscalesize参数,在这里表示正态分布的平均值标准差储存数组形状
  4. np.random.normalrandom表示生成随机数normal表示正态分布,组合到一起就是生成正态分布的随机数。

★整理成三行代码:

import numpy as np  #导入numpy库,令其用np表示
loc1= 0;scale1= 0.1;size1=(2,2) #赋予参数值
print(np.random.normal(loc=loc1,scale=scale1,size=size1))#输出结果

结果如下

2依旧可以看出只是这样编写代码的话,还是无法实现重现,那么这时候引入一个随机种子的概念。随机种子在笔者看来就是,只要给定一个随机种子值,它对应的随机数就有了它对应的顺序的随机顺序。


★利用RandomState重现生成随机数过程


→原因:
  1. 给random_state赋一个值,别人运行此代码也可以复现你的过程。,若不设置此参数则会随机选择一个种子,执行结果也会不同了。
  2. 在做一些复杂的机器学习等 模型训练 时,某个随机种子在训练集上表现好,未必在陌生训练集上表现

→要点:
  1. 导入RandomState库from numpy.random import RandomState
  2. 设定随机种子值random_state=1
  3. 生成伪随机数器rdm = RandomState(random_state)
  4. 设定参数loc = 0,scale = 0.1,size =10
  5. 输出结果print(rdm.normal(loc, scale, size))

→最终代码:
from numpy.random import RandomState #导入RandomState库
random_state=1  #给定随机种子值
rdm = RandomState(random_state)  #生成伪随机数器,就把它看作一个有一定顺序的一组数据,所以叫 伪随机
loc = 0;scale = 0.1;size =10;    #设定参数值
print(rdm.normal(loc, scale, size)) #输出随机数

结果如下

3
可以看到两个随机种子都取 random_state=1 ,结果是一样的!
这里留个小问题,如果print(rdm.normal(loc, scale, size)) 输出两遍,那么结果是否一样呢?大家可以自己运行试一试哦!想知道答案,笔者会在公众号中给出,欢迎大家交流!


欢迎大家关注“佐佑思维”公众号
笔者会持续共享经验
愿你能有所收获
期待与你相遇

佐佑思维

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值