我是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中的函数出了什么问题
答案 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