生成指定分布的随机数
- 两种方法生成指定分布的随机数
- 1、scipy.stats方法生成正态分布的随机数
- ★步骤:
- ★代码详细解释:
- ★整理成三行代码:
- 2、numpy方法生成正态分布的随机数
- ★步骤与方法1类似
- ★代码详细解释:
- ★整理成三行代码:
- ★利用RandomState重现生成随机数过程
- →原因:
- →要点:
- →最终代码:
两种方法生成指定分布的随机数
介绍两种方法生成指定分布的随机数:
库 | 生成正态分布的随机数方法 |
统计函数库:scipy.stats | scipy.stats.norm.rvs(loc = 0,scale = 0.1,size =10) |
数组、矩阵库:numpy | numpy.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))
★代码详细解释:
-
import scipy.stats
:导入scipy.stats库; -
as st
:用 st 表示scipy.stats库; -
loc
和scale
:参数,表示随机变量的偏移和缩放,在这里对应正态分布的平均值和标准差; -
size
:参数,表示生成的大量随机数会储存在什么样的数据空间中,是一维数组呢,还是多维,None表示只生成一个数; -
st.norm.rvs
: norm表示正态分布,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)) #输出结果
结果如下:
虽然生成了结果,但是可以从图中看出来,结果一和结果二的输出代码是一样的,但是输出结果却是不一样的,这就说明这种方法生成的随机数是在不停地变化的,不信你可以运行多次,每次的结果都会不一样,不过这样也达到了目的。却无法让别人重现你的代码结果,那么针对这个问题来看看方法二。
2、numpy方法生成正态分布的随机数
★步骤与方法1类似
★代码详细解释:
-
import numpy
:导入numpy库; -
as np
:用 np 表示numpy库; -
loc
、scale
、size
:参数,在这里表示正态分布的平均值、标准差、储存数组形状; -
np.random.normal
:random表示生成随机数,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))#输出结果
结果如下:
依旧可以看出只是这样编写代码的话,还是无法实现重现,那么这时候引入一个随机种子的概念。随机种子在笔者看来就是,只要给定一个随机种子值,它对应的随机数就有了它对应的顺序的随机顺序。
★利用RandomState重现生成随机数过程
→原因:
- 给random_state赋一个值,别人运行此代码也可以复现你的过程。即,若不设置此参数则会随机选择一个种子,执行结果也会不同了。
- 在做一些复杂的机器学习等 模型训练 时,某个随机种子在训练集上表现好,未必在陌生训练集上表现好。
→要点:
- 导入RandomState库:
from numpy.random import RandomState
- 设定随机种子值:
random_state=1
- 生成伪随机数器:
rdm = RandomState(random_state)
- 设定参数:
loc = 0,scale = 0.1,size =10
- 输出结果:
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)) #输出随机数
结果如下:
可以看到两个随机种子都取 random_state=1 ,结果是一样的!