欢迎访问宙启技术站
智能推送

使用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()函数绘制了截断正态分布的概率密度函数曲线。

运行以上代码,可以得到一个截断正态分布的随机数序列的直方图,以及截断正态分布的概率密度函数曲线。从直方图可以看出,随机数序列集中在截断的范围内,并且符合正态分布的特点。