numpy库随机数生成

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Jakob_Hu/article/details/88931973

numpy中随机数生成使用的是random模块,尤其是一些特殊分布的样本值的生成,而且生成数据很高效,对比numpy模块的random和Python内置模块的random,
在这里插入图片描述
Python内置的random方法一次只能生成一个随机数,列表生成器的效率比较低,而且参与运算还需要从列表转到数组,又要花费时间。

numpy随机数生成函数

在这里插入图片描述
在这里插入图片描述

permutation方法

permutation方法将给定的数据进行重新排列,接受参数的形式常用的有如下3种,

# 传入指定值
np.random.permutation(10)            
# 返回 array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])

# 传入列表
np.random.permutation([1, 4, 9, 12, 15])    
# 返回 array([15, 1, 9, 4, 12])

# 传入数组
arr = np.arange(9).reshape((3, 3))
np.random.permutation(arr)                
# 返回 array([[6, 7, 8], 
#			 [0, 1, 2], 
#			 [3, 4, 5]])

shuffle方法

功能与permutation相同,但是只能接受 array_like的参数,速度上快于permutation,

#只能传入array_like的参数
arr = np.arange(10)
np.random.shuffle(arr)            
# 返回arr[1 7 5 2 9 4 3 6 0 8]

arr = np.arange(9).reshape((3, 3))
np.random.shuffle(arr)            
# 返回 array([[3, 4, 5], 
#			 [6, 7, 8], 
#			 [0, 1, 2]])

rand方法

在这里插入图片描述

Create an array of the given shape and populate it with random samples from a uniform distribution over [0, 1)

满足[0,1)均匀分布的值,方法的参数是各个维度的大小,

np.random.rand(3,2)            
# 返回 array([[ 0.14022471, 0.96360618],
#			  [ 0.37601032, 0.25528411], 
#			 [ 0.49313049, 0.94909878]]) 

randint方法

在这里插入图片描述

Return random integers from [low , high)
If high is None (the default), then results are from [0, low)

满足“discrete uniform” distribution(离散型标准分布)。如果没有给出high这个参数,默认[0 , low)这个范围。size参数的形式,size : int or tuple of ints。

np.random.randint(2, size=10)        
# 返回array([1, 0, 0, 0, 1, 1, 0, 0, 1, 0])

np.random.randint(1, size=10)        
# 返回 array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

# Generate a 2 x 4 array of ints between 0 and 4, inclusive:
np.random.randint(5, size=(2, 4))      
# 返回 array([[4, 0, 2, 1], 
#			[3, 2, 2, 0]])

randn方法

在这里插入图片描述
返回标准正态分布的样本值,方法的参数是各个维度的大小,

# 不指定维度则返回一个值
np.random.randn()            
# 返回 2.1923875335537315 

# 指定维度,生成数组可参与运算
2.5 * np.random.randn(2, 4) + 3        
# 返回array([[-4.49401501, 4.00950034, -1.81814867, 7.29718677],                                                                               
#			[ 0.39924804, 4.68456316, 4.99394529, 4.84057254]]) 

binomial方法

在这里插入图片描述
参数n是整数组成的数组,参数p是浮点数或者浮点数数组,size是用于指定维度的元组。该方法产生二项分布的随机样本,二项分布公式如下,
在这里插入图片描述
官方文档的说明,

where n is the number of trials, p is the probability of success, and is the number of successes.

n是总试验次数,N是n次尝试中成功的次数,p是成功的经验概率。

#用binomial方法模拟抛10次硬币,正面向上的情况(测试100次)
# number of trials, probability of each trial
n, p = 10, 0.5                      

s = np.random.binomial(n, p, 100)

返回结果
在这里插入图片描述

normal方法

在这里插入图片描述
loc参数代表正态分布的中心(即样本均值),scale参数是正态分布的样本标准差,size参数是维度。该方法产生服从正态分布的随机样本,正态分布公式如下,
在这里插入图片描述

mu, sigma = 0, 0.1         # mean and standard deviation
s = np.random.normal(mu, sigma,2,10)

得到结果如下,
在这里插入图片描述

beta方法

在这里插入图片描述
a和b参数分别表示beta分布的系数 α和β,都是非负的size参数还是指定维度的参数,传入的可以是整数或者整数组成的元组。该方法产生的是服从β分布的随机样本,beta分布公式为,
在这里插入图片描述
在这里插入图片描述

chisquare方法

在这里插入图片描述
df参数是自由的(非负数),size参数指定的是维度,方法返回服从卡方分布的随机样本数组,

np.random.chisquare(2,4)            #返回 array([ 1.89920014, 9.00867716, 3.13710533, 5.62318272])

gamma方法

在这里插入图片描述
其中shape参数是大于0的浮点数,是γ分布的形状;scale参数也是大于0的浮点数,限定γ分布的规模;size参数指定样本的维度,γ分布满足如下公式,
在这里插入图片描述

shape, scale = 2., 2.          # mean=4, std=2*sqrt(2)   数学意义
s = np.random.gamma(shape, scale, 1000)

uniform方法

在这里插入图片描述
返回的是在区间 [ low , high )的均匀分布的样本值。在 [ a , b )区间中,样本值的分布满足下式,
在这里插入图片描述

# [ -1 , 0 )区间内的均匀分布样本,维度 1×100
s = np.random.uniform(-1,0,100)            

在这里插入图片描述

模拟随机漫步

随机漫步的模拟:从0开始,步长为 -1或1,走1000步,记录过程,
方法一:纯Python实现
在这里插入图片描述
方法二:numpy实现
在这里插入图片描述
这个数组还可以进行一些统计工作,
在这里插入图片描述

numpy不仅仅效率高,而且可以同时模拟多个随机漫步,同时模拟5000个随机漫步过程,每个随机漫步走1000步,
在这里插入图片描述
依旧可以求出5000个随机漫步过程的最大值与最小值,
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Jakob_Hu/article/details/88931973