5

scipy.stats.norm.pdf()の代替案を知っている人はいますか?PythonサイトをGoogleAppEngineでホストしていますが、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)

最初の行に注意してください!それ以外の場合は、たとえば、を乗算することにより、各入力変数をfloatに変換できます。1.

于 2011-12-29T14:58:00.667 に答える
6

内の2による除算は、に評価されるexpたびに整数除算として解釈されます。これを防ぐために、手動でキャストすることにより、常にがに評価されるようにすることができます。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(とのデフォルトの引数も提供しましsigmaた。必要に応じてそれらを削除できます)

于 2011-12-29T14:58:13.337 に答える