2011-12-29 27 views
5

有沒有人知道scipy.stats.norm.pdf()的替代方案?我在Google App Engine上託管我的Python網站,而Google不支持SciPy。scipy.stats.norm.pdf的替代方案?

我試過這個功能,但是這並沒有爲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 

回答

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) 

注意第一行!否則,你可以將每個輸入變量轉換爲浮點數,例如通過2內的exp1.

+0

兩種解決方案合作完美! – Leon 2011-12-29 15:05:43

6

劃分乘以被解釋爲整數除法每當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,你可以刪除這些,如果你想)