5

有谁知道 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
4

2 回答 2

9

你被 pythons 整数除法算术欺骗了!这是一些工作代码:

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.

于 2011-12-29T14:58:00.667 回答
6

每当计算为时, 内部的除以 2exp被解释为整数除法。为了防止这种情况,您可以通过手动转换来确保始终评估为 a :uintufloat

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(我还为and提供了默认参数sigma,如果需要,您可以删除这些参数)

于 2011-12-29T14:58:13.337 回答