使用scipy.statstruncnorm()函数在Python中生成截断正态分布的随机数序列
发布时间:2023-12-26 21:09:48
scipy.stats.truncnorm()函数可以用于生成服从截断正态分布的随机数序列。截断正态分布是指在一定范围内截取正态分布的分布。它的概率密度函数(Probability Density Function,PDF)为:
f(x) = (1/(σ√(2π))) * exp((-1/2) * ((x-μ)/σ)^2)
其中,μ是正态分布的均值,σ是正态分布的标准差。
截断的范围可以通过设置下限和上限来实现。
下面是一个使用scipy.stats.truncnorm()函数生成截断正态分布随机数序列的例子:
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import truncnorm
# 设置正态分布的参数
mu = 0 # 均值
sigma = 1 # 标准差
# 设置截断范围
a = -2 # 下限
b = 2 # 上限
# 生成随机数序列
samples = truncnorm.rvs((a - mu) / sigma, (b - mu) / sigma, loc=mu, scale=sigma, size=1000)
# 绘制直方图
plt.hist(samples, bins=50, density=True, alpha=0.7)
# 绘制正态分布曲线
x = np.linspace(-4, 4, 1000)
y = truncnorm.pdf(x, (a - mu) / sigma, (b - mu) / sigma, loc=mu, scale=sigma)
plt.plot(x, y, 'r', lw=2)
# 设置图表标题和坐标轴标签
plt.title('Truncated Normal Distribution')
plt.xlabel('Value')
plt.ylabel('Density')
# 显示图表
plt.show()
在上述例子中,首先设置了正态分布的均值mu和标准差sigma。然后设置了截断的范围a和b。通过truncnorm.rvs()函数生成满足截断正态分布的随机数序列。最后使用plt.hist()函数绘制了生成的随机数序列的直方图,并使用plt.plot()函数绘制了截断正态分布的概率密度函数曲线。
运行以上代码,可以得到一个截断正态分布的随机数序列的直方图,以及截断正态分布的概率密度函数曲线。从直方图可以看出,随机数序列集中在截断的范围内,并且符合正态分布的特点。
