2. 基于统计分布的数据合成
任务目标
给定均值 μ 和标准差 σ,生成一组符合正态分布 N(μ, σ²) 的数值型数据,用于模拟身高或体重等连续型变量。本案例使用 Python 标准库与 NumPy 实现,不依赖外部数据文件。
实现方案
使用 NumPy 的 random.normal 方法生成指定规模的样本。为便于复现,设置随机种子。生成后计算样本均值与标准差,与目标参数对比以验证生成质量。
完整代码
import numpy as np
def generate_normal_data(mean: float, std: float, size: int, seed: int = 42) -> np.ndarray:
"""
生成服从正态分布的数值数据。
参数:
mean: 目标均值 μ
std: 目标标准差 σ
size: 样本数量
seed: 随机种子,保证可复现
返回:
np.ndarray: 生成的样本数组
"""
rng = np.random.default_rng(seed)
return rng.normal(loc=mean, scale=std, size=size)
if __name__ == "__main__":
# 模拟身高:均值 170cm,标准差 6cm
mu, sigma, n = 170.0, 6.0, 1000
samples = generate_normal_data(mu, sigma, n)
# 验证:计算样本统计量
sample_mean = np.mean(samples)
sample_std = np.std(samples, ddof=1) # 样本标准差
print(f"目标参数: μ={mu}, σ={sigma}")
print(f"样本统计: 均值={sample_mean:.2f}, 标准差={sample_std:.2f}")
print(f"前5个样本: {samples[:5]}")
运行方式
- 安装依赖:
pip install numpy - 将代码保存为
generate_normal.py,执行python generate_normal.py
验证方法
程序输出样本均值与标准差。由于随机抽样存在波动,当样本量 n ≥ 1000 时,样本均值与目标 μ 的偏差通常在 ±0.3 以内,样本标准差与目标 σ 的偏差通常在 ±0.2 以内。若偏差明显超出此范围,说明随机种子或参数设置有误。
预期输出(示例)
目标参数: μ=170.0, σ=6.0
样本统计: 均值=169.98, 标准差=6.05
前5个样本: [168.32 171.45 169.87 172.10 167.93]
注:具体数值因随机种子而异,但统计量应接近目标参数。
常见问题
- 样本标准差与 σ 偏差较大:增加样本量(如 n=10000)可减小波动。
- 需要整数型数据:可在生成后调用
np.round()取整,但会略微改变标准差。