有没有人知道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
答案 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}}的默认参数,如果需要,可以删除它们