【发布时间】:2012-11-14 07:18:38
【问题描述】:
我有一个作业问题,我应该写一个峰度函数,如下所述:
分母中的 theta 是标准差(方差的平方根),分子中的 x-with-the-bar 是x 的平均值。
我实现的功能如下:
import numpy as np
from scipy.stats import kurtosis
testdata = np.array([1, 2, 3, 4, 5])
def mean(obs):
return (1. / len(obs)) * np.sum(obs)
def variance(obs):
return (1. / len(obs)) * np.sum((obs - mean(obs)) ** 2)
def kurt(obs):
num = np.sqrt((1. / len(obs)) * np.sum((obs - mean(obs)) ** 4))
denom = variance(obs) ** 2 # avoid losing precision with np.sqrt call
return num / denom
前两个函数mean 和variance 分别与numpy.mean 和numpy.var 成功交叉验证。
我尝试使用以下语句交叉验证kurt:
>>> kurtosis(testdata) == kurt(testdata)
False
这是两个峰度函数的输出:
>>> kurtosis(testdata) # scipy.stats
-1.3
>>> kurt(testdata) # my crappy attempt
0.65192024052026476
我哪里做错了? scipy.stats.kurtosis 做的事情是否比我给出的方程式更精彩?
【问题讨论】:
标签: python numpy statistics scipy