如何计算累积正态分布?

140 投票
8 回答
246361 浏览
提问于 2025-04-15 11:20

我在找一个可以在Python中使用的函数,这个函数来自Numpy或Scipy(或者其他可靠的Python库),它能帮我计算累积正态分布函数。

8 个回答

55

Python 3.8 开始,标准库里新增了一个叫 NormalDist 的对象,它是 statistics 模块的一部分。

这个对象可以用来计算累积分布函数cdf),也就是一个随机样本 X 小于或等于某个值 x 的概率。你只需要提供一个均值mu)和一个标准差sigma):

from statistics import NormalDist

NormalDist(mu=0, sigma=1).cdf(1.96)
# 0.9750021048517796

对于标准正态分布(也就是 mu = 0sigma = 1),这个计算可以简化:

NormalDist().cdf(1.96)
# 0.9750021048517796

NormalDist().cdf(-1.96)
# 0.024997895148220428
59

可能现在回答这个问题有点晚了,但因为谷歌还是把人们引导到这里,所以我决定在这里写下我的解决方案。

从Python 2.7开始,math库里就加入了一个叫做错误函数的东西,叫math.erf(x)

这个erf()函数可以用来计算一些传统的统计函数,比如累积标准正态分布:

from math import *
def phi(x):
    #'Cumulative distribution function for the standard normal distribution'
    return (1.0 + erf(x / sqrt(2.0))) / 2.0

参考资料:

https://docs.python.org/2/library/math.html

https://docs.python.org/3/library/math.html

错误函数和标准正态分布函数有什么关系?

165

这里有个例子:

>>> from scipy.stats import norm
>>> norm.cdf(1.96)
0.9750021048517795
>>> norm.cdf(-1.96)
0.024997895148220435

换句话说,大约95%的标准正态分布的数值都落在以零为中心的两个标准差范围内。

如果你需要反向的累积分布函数(CDF):

>>> norm.ppf(norm.cdf(1.96))
array(1.9599999999999991)

撰写回答