You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Scipy生成并绘制正态分布N[5,3²]的概率密度函数PDF

Scipy绘制正态分布N(5, 3²)概率密度函数的实现方案

你当前的代码存在两个问题:

  1. stats.norm.rvs()的作用是生成符合指定正态分布的随机抽样值,无法直接输出概率密度函数(PDF)的计算结果用于绘图
  2. stats.norm系列方法的第二个位置参数是标准差,你需要的分布标准差是3,如果传入3**2(也就是9),实际对应的是N(5, 9²)的分布,和你的需求不符。

完整实现步骤

  • 导入所需依赖:除了scipy.stats外,还需要matplotlib用于绘图、numpy用于生成连续的横轴数值
  • 定义正态分布参数:均值mu=5、标准差sigma=3
  • 生成横轴连续区间:一般取均值上下4倍标准差的范围即可覆盖99.99%的分布区间,生成1000个以上连续点可保证曲线平滑
  • 调用stats.norm.pdf()方法计算对应横轴点的PDF数值
  • 绘图展示

可直接运行的完整代码如下:

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

# 定义分布参数
mu = 5
sigma = 3

# 生成横轴数据
x = np.linspace(mu - 4*sigma, mu + 4*sigma, 1000)
# 计算对应点的PDF值
pdf = stats.norm.pdf(x, loc=mu, scale=sigma)

# 绘制PDF曲线
plt.plot(x, pdf, 'b-', linewidth=2, label=f'N({mu}, {sigma}²) 概率密度函数')
# 配置图表样式
plt.xlabel('数值')
plt.ylabel('概率密度')
plt.legend()
# 展示图表
plt.show()

可选拓展:叠加随机样本直方图验证

如果需要和你之前通过rvs生成的随机样本的分布做对比,可以在上述代码的plt.plot和plt.legend之间加入以下代码,叠加归一化后的直方图:

# 生成10000个符合N(5,3²)的随机样本
sample = stats.norm.rvs(loc=mu, scale=sigma, size=10000)
# 绘制归一化直方图,alpha调整透明度避免遮挡PDF曲线
plt.hist(sample, bins=30, density=True, alpha=0.3, color='gray', label='随机样本分布直方图')

内容的提问来源于stack exchange,提问作者teddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:36:04