计算python中的高斯分布是错误的

时间:2014-04-29 14:08:56

标签: python

我是python的新手,现在我正在使用python来计算高斯分布。

在这个例子中,mean是100,标准差是10,那么我需要在90和110中计算pdf。

我的代码就像

def gaussian_distribution(x , mean, dev):
    k = 1.0/ (dev * math.sqrt(2*math.pi))
    s = -1.0/ ( 2* dev*dev )
    return k * math.exp( (x-mean)*(x-mean) * s )

print gaussian_distribution( 110, 100, 10), gaussian_distribution( 90, 100, 10)

但值均为0.0241970724519,这是错误的,不同于答案0.84和来自o nline calculator的0.1。

我不知道我在python中的函数出了什么问题

1 个答案:

答案 0 :(得分:2)

您的pdf是正确的,而在线计算器为您提供累计分配函数cdf

根据定义,后者是从负无穷大到参数的pdf的积分,所以:

>>> from scipy.integrate import quad
>>> quad(gaussian_distribution, -np.inf, 110, args=(100., 10.))
(0.841344746068544, 1.1360408153147754e-08)

除非是自我学习练习,否则只需使用scipy.stats

>>> from scipy.stats import norm
>>> norm.pdf(110, loc=100., scale=10.)
0.024197072451914336
>>> norm.cdf(110, loc=100., scale=10.)
0.84134474606854293