scipy.stats.norm.pdf的替代方法是什么?

6

有没有人知道替代scipy.stats.norm.pdf()函数的方法?我将我的python网站托管在Google App Engine上,而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个回答

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.


6

exp函数内部的除以2操作,当u被解释为int时会被解释为整数除法。为了避免这种情况,您可以通过手动转换确保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

我还为musigma提供了默认参数,如果您想要删除它们,可以这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接