我正在寻找Numpy或Scipy (或任何严格的Python库)中的函数,它将给出Python中的累积正态分布函数。
发布于 2009-04-30 22:24:03
下面是一个例子:
>>> 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)
发布于 2015-03-26 15:40:44
现在回答这个问题可能为时已晚,但由于谷歌仍在引领人们,我决定在这里写下我的解决方案。
也就是说,从Python2.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
How are the Error Function and Standard Normal distribution function related?
发布于 2009-04-30 22:23:29
改编自这里的http://mail.python.org/pipermail/python-list/2000-June/039873.html
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))
https://stackoverflow.com/questions/809362
复制相似问题