关于python中numpy生成随机数的那点事

python 中 numpy 是一个非常实用的工具包,它的底层由 c 编写,效率快于原生的 python。本文将主要介绍 python 产生随机数的主流方法,有一定的可视化图片,通俗易通理解他们的用法。

  • 首先我们导入需要用的模块。
import numpy as np
import matplotlib.pyplot as plt
  • random() 这个方法可以生成 [0,1) 的随机浮点数,有一个参数,可以设置生成数据的维度。
#random(size=None)size是维度
np.random.random([3,1])
  • 对于产生均匀分布的随机数有以下 3 个方法,有相应注释介绍他们的参数以及使用可视化。
#rand(d0, d1, ..., dn)生成均匀分布的[0,1)(不能修改范围)的随机数,参数是指定维度
ran=np.random.rand(100)

#uniform(low=0.0, high=1.0, size=None)生成均匀分布的[0,1)(可以修改范围)的随机数,size指定维度
ran_ui=np.random.uniform(-3,3,size=[100])

#randint(low, high=None, size=None, dtype=int)不设置high就生成[0,low)的离散均匀分布随机整数,设置了就生成[low,high)。
ran_ri=np.random.randint(-3,3,size=[100])#size是设置维度,dtype设置数的类型

#均匀分布函数
def f(x,a,b):
    if x>=a and x<=b:
        f=1/(b-a)
    else:
        f=0
    return f
val=[f(i,0,1) for i in ran]
val_ui=[f(i,-3,3) for i in ran_ui]
val_ri=[f(i,-3,3) for i in ran_ri]

x=[ran,ran_ui,ran_ri]
y=[val,val_ui,val_ri]
color=['blue','red','orange']
label=['random.rand','random.uniform','random.randint']
plt.figure(figsize=[6,6])
for i in range(3):
    plt.subplot(3,1,i+1)
    plt.scatter(x[i],y[i],c=color[i],s=8,alpha=0.7,label=label[i])
    plt.legend()
plt.show()

均匀分布

  • 对于产生标准正态分布的随机数有该方法,对其随机生成的数结合分布函数进行可视化。
#randn(d0, d1, ..., dn)参数是指定维度,生成标准正态分布的的随机数
ran=np.random.randn(10000)

#标准正态分布函数
def f(x):
    f=(1/np.sqrt(2*np.pi))*np.exp(-(x**2)/2)
    return f
val=[f(i) for i in ran]
plt.scatter(ran,val,c='blue',s=0.7,alpha=0.7,label='Standard normal distribution')
plt.legend()
plt.show()

标准正态分布

  • 还有其他几个产生随机数的方法,目前使用较少,甚至已经被替代了,想详细了解的小伙伴可以去看官方文档
#random_integers(low, high=None, size=None),该方法已经被random.randint取代
#返回[1,low)的随机整数,或者[low,high)
np.random.random_integers(10)#这里设置low为10

#random_sample(size=None)
#返回[0,1)随机浮点数
np.random.random_sample()

#该方法和random_sample一致
np.random.ranf()

猜你喜欢

转载自blog.csdn.net/lhrfighting/article/details/119023847
今日推荐