替代scipy.stats.norm.pdf?

时间:2011-12-29 14:43:49

标签: python math scipy normal-distribution

有没有人知道scipy.stats.norm.pdf()的替代方案?我在Google App Engine上托管我的python网站,谷歌不支持SciPy。

我已尝试过此功能,但这并没有像scipy那样返回相同的结果:

def normpdf(x, mu, sigma):
    u = (x-mu)/abs(sigma)
    y = (1/(sqrt(2*pi)*abs(sigma)))*exp(-u*u/2)
    return y

例如:

print scipy.stats.norm.pdf(20, 20, 10)
print normpdf(20, 20, 10)

print scipy.stats.norm.pdf(15, 20, 10)
print normpdf(15, 20, 10)

print scipy.stats.norm.pdf(10, 20, 10)
print normpdf(10, 20, 10)

返回以下值:

0.0398942280401
0.0398942280401

0.0352065326764
0.0146762663174

0.0241970724519
0.0146762663174

2 个答案:

答案 0 :(得分:9)

你被蟒蛇整数分裂算术欺骗了!这是一些有效的代码:

from __future__ import division

import scipy.stats
from numpy import *

def normpdf(x, mu, sigma):
    u = (x-mu)/abs(sigma)
    y = (1/(sqrt(2*pi)*abs(sigma)))*exp(-u*u/2)
    return y


print scipy.stats.norm.pdf(20, 20, 10)
print normpdf(20, 20, 10)

print scipy.stats.norm.pdf(15, 20, 10)
print normpdf(15, 20, 10)

print scipy.stats.norm.pdf(10, 20, 10)
print normpdf(10, 20, 10)

注意第一行!否则,您可以将每个输入变量转换为浮点数,例如乘以1.

答案 1 :(得分:6)

exp评估为u时,int内部除以2将被解释为整数除法。为防止出现这种情况,您可以确保u始终通过手动投射来float评估为def normpdf(x, mu=0, sigma=1): u = float((x-mu) / abs(sigma)) y = exp(-u*u/2) / (sqrt(2*pi) * abs(sigma)) return y

mu

(我还提供了sigma和{{1}}的默认参数,如果需要,可以删除它们