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

在Python中生成截断正态分布的随机数据(使用scipy.statstruncnorm()方法)

发布时间:2023-12-26 21:11:25

在Python中,可以使用scipy库的stats模块中的truncnorm函数生成截断正态分布的随机数据。

首先,需要安装scipy库,可以使用以下命令进行安装:

pip install scipy

接下来,我们可以编写一个简单的示例代码来生成截断正态分布的随机数据。假设我们要生成均值为mu,标准差为sigma的截断正态分布,在区间[min_val, max_val]内的样本数量为n。

import matplotlib.pyplot as plt
import numpy as np
from scipy.stats import truncnorm

def truncnorm_random(mu, sigma, min_val, max_val, n):
    a = (min_val - mu) / sigma
    b = (max_val - mu) / sigma
    samples = truncnorm.rvs(a, b, loc=mu, scale=sigma, size=n)
    return samples

# 截断正态分布的参数
mu = 0  # 均值
sigma = 1  # 标准差
min_val = -2  # 最小值
max_val = 2  # 最大值
n = 1000  # 样本数量

# 生成截断正态分布的随机数据
data = truncnorm_random(mu, sigma, min_val, max_val, n)

# 绘制直方图
plt.hist(data, bins=30, density=True, alpha=0.7, rwidth=0.85)
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.title('Truncated Normal Distribution')
plt.show()

在上述代码中,我们定义了一个名为truncnorm_random的函数,接受截断正态分布的参数(均值mu,标准差sigma,最小值min_val,最大值max_val)以及样本数量n作为输入。该函数使用truncnorm.rvs函数生成具有给定参数的截断正态分布的随机数据。然后,我们使用matplotlib库绘制生成的数据的直方图。

运行上述代码,将生成符合截断正态分布的随机数据,并绘制出直方图。你可以根据需要调整截断正态分布的参数以及样本数量,以获得不同分布形状的随机数据。