Leo*_*eon 6 python math normal-distribution scipy
有没有人知道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
Run Code Online (Sandbox Code Playgroud)
例如:
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)
Run Code Online (Sandbox Code Playgroud)
返回以下值:
0.0398942280401
0.0398942280401
0.0352065326764
0.0146762663174
0.0241970724519
0.0146762663174
Run Code Online (Sandbox Code Playgroud)
你被蟒蛇整数分裂算术欺骗了!这是一些工作代码:
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)
Run Code Online (Sandbox Code Playgroud)
注意第一行!否则,您可以将每个输入变量转换为浮点数,例如乘以1.
exp每当u评估为a 时,除以2的除法被解释为整数除法int.为了防止这种情况,您可以确保u始终float通过手动强制转换为a 来评估:
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
Run Code Online (Sandbox Code Playgroud)
(我还提供了默认参数mu和sigma,你可以删除这些,如果你想)