random.gauss()函数和numpy.random.normal()函数生成正态分布随机数
【1】引言
前序学习进程中,已经学习了torch.normal()函数生成的随机数据添加噪声,正好回忆一下,使用random系列的函数也能生成正态分布随机数。
【2】random.gauss()函数
random.gauss()函数一次性只能生成一个随机数,效率比较低。
# 引入random模块
import random# 生成随机数
num=random.gauss(0,1)
print(num)
比如这个简单的项目,每次运行就只会输出一个随机数,这里给出一个实例:
如果想生成多个随机数,就要借用循环,比如修改代码为:
# 引入random模块
import random# 定义参数
mu=0
std=1
n=10# 使用列表推导式生成正态分布随机数
for i in range(n):print('a[',i,']=',random.gauss(mu,std))
此时运行代码就会一次性输出10个满足均值为0,标准差为1的正态分布随机数,比如:
【3】random.normal()函数
random.normal()函数一次性能生成多个随机数,效率相对较高,基本格式
random.normal(均值mu,标准差std,形状size)
# 引入random模块
import random
import numpy as np# 定义参数
mu=0
std=1
n=10# 生成随机数
num=np.random.normal(mu,std,n)
print(num)
比如上述代码的意图是,一次性生成10个满足均值为0,标准差为1的正态分布随机数,比如:
由于random.normal()函数可以灵活制定生成的随机数形状
此时可以来一个更大胆的,一次性生成多个数据,然后展平后画图:
# 引入random模块
import random
from cProfile import label
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.pyplot import legend# 定义参数
mu=0
std=1
size=(200,300)# 生成随机数
num=np.random.normal(mu,std,size=size)# 绘图
plt.hist(num.flatten(),bins=50,label='random.normal')
plt.xlabel(xlabel='x')
plt.ylabel(ylabel='random.normal')
plt.legend()
plt.show()
此时会直接生成200行300列的随机数,它们满足均值为0、标准差为1的正态分布,经过展开后可以绘制成概率密度分布图,输出效果为:
【4】细节说明
random.gauss()函数和numpy.random.normal()函数每次生成随机数的效率不同,当前torch.normal()函数和numpy.random.normal()函数的用法非常相似,应注意及时灵活转化。
【5】总结
学习了random.gauss()函数和numpy.random.normal()函数生成正态分布随机数基本技巧。