首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何计算累积正态分布?

如何计算累积正态分布?
EN

Stack Overflow用户
提问于 2009-04-30 22:13:11
回答 7查看 178.2K关注 0票数 124

我正在寻找Numpy或Scipy (或任何严格的Python库)中的函数,它将给出Python中的累积正态分布函数。

EN

回答 7

Stack Overflow用户

发布于 2009-04-30 22:24:03

下面是一个例子:

代码语言:javascript
复制
>>> from scipy.stats import norm
>>> norm.cdf(1.96)
0.9750021048517795
>>> norm.cdf(-1.96)
0.024997895148220435

换句话说,大约95%的标准正常区间位于两个标准偏差内,以零的标准均值为中心。

如果您需要反向CDF:

代码语言:javascript
复制
>>> norm.ppf(norm.cdf(1.96))
array(1.9599999999999991)
票数 149
EN

Stack Overflow用户

发布于 2015-03-26 15:40:44

现在回答这个问题可能为时已晚,但由于谷歌仍在引领人们,我决定在这里写下我的解决方案。

也就是说,从Python2.7开始,math库集成了错误函数math.erf(x)

erf()函数可用于计算传统的统计函数,如累积标准正态分布:

代码语言:javascript
复制
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

How are the Error Function and Standard Normal distribution function related?

票数 51
EN

Stack Overflow用户

发布于 2009-04-30 22:23:29

改编自这里的http://mail.python.org/pipermail/python-list/2000-June/039873.html

代码语言:javascript
复制
from math import *
def erfcc(x):
    """Complementary error function."""
    z = abs(x)
    t = 1. / (1. + 0.5*z)
    r = t * exp(-z*z-1.26551223+t*(1.00002368+t*(.37409196+
        t*(.09678418+t*(-.18628806+t*(.27886807+
        t*(-1.13520398+t*(1.48851587+t*(-.82215223+
        t*.17087277)))))))))
    if (x >= 0.):
        return r
    else:
        return 2. - r

def ncdf(x):
    return 1. - 0.5*erfcc(x/(2**0.5))
票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/809362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档