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

如何用Numpy/Scipy结合均值、标准差、最值使用正态分布?

用Numpy/Scipy实现指定区间的正态分布概率计算

要计算正态分布在给定[最小值, 最大值]区间内的概率,核心思路是利用累积分布函数(CDF):区间概率 = 最大值对应的CDF值 - 最小值对应的CDF值。以下是Numpy和Scipy的具体实现方案:

一、Scipy实现(更直观便捷)

Scipy的scipy.stats.norm模块封装了正态分布的常用统计方法,直接调用cdf()方法即可计算累积概率。

代码示例(对应你的体重问题)

from scipy.stats import norm

# 定义正态分布参数
mu = 61  # 均值
sigma = 5  # 标准差
lower = 59  # 区间最小值
upper = 63  # 区间最大值

# 计算区间概率:upper的CDF值减去lower的CDF值
probability = norm.cdf(upper, loc=mu, scale=sigma) - norm.cdf(lower, loc=mu, scale=sigma)

print(f"体重在59-63kg之间的人群占比:{probability:.4f}(即{probability*100:.2f}%)")

运行结果会输出0.3108,和你手动查表的结果完全一致。

二、Numpy实现(依赖误差函数erf)

Numpy没有直接提供正态分布的CDF函数,但可以通过误差函数numpy.erf()推导计算,正态分布CDF的公式为:

CDF(x) = 0.5 * (1 + erf((x - mu) / (sigma * sqrt(2))))

代码示例(对应你的体重问题)

import numpy as np

# 定义参数
mu = 61
sigma = 5
lower = 59
upper = 63

# 实现正态分布CDF函数
def norm_cdf(x, mu, sigma):
    return 0.5 * (1 + np.erf((x - mu) / (sigma * np.sqrt(2))))

# 计算区间概率
probability = norm_cdf(upper, mu, sigma) - norm_cdf(lower, mu, sigma)

print(f"体重在59-63kg之间的人群占比:{probability:.4f}(即{probability*100:.2f}%)")

运行结果同样为0.3108,和手动计算结果匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 21:52:35