scipy.stats.norm.pdf的替代方案?

6 投票
2 回答
17861 浏览
提问于 2025-04-17 09:12

有没有人知道可以替代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

(我还提供了musigma的默认参数,如果你不需要可以把它们去掉)

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.来把每个输入变量转换成浮点数。

撰写回答