scipy.stats.norm.pdf的替代方案?
有没有人知道可以替代scipy.stats.norm.pdf()的其他方法?我在Google App Engine上托管我的Python网站,而Google不支持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 个回答
6
在exp
里面的除以2操作,如果u
是整数的话,就会被当作整数除法来处理。为了避免这种情况,你可以确保u
总是被当作浮点数来计算,可以通过手动转换来实现:
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
的默认参数,如果你不需要可以把它们去掉)
10
你被Python的整数除法搞糊涂了!下面是一些可以运行的代码:
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.
来把每个输入变量转换成浮点数。