21

我正在尝试计算数组的修剪均值,其中不包括异常值。

我发现有一个名为的模块scipy.stats.tmean,但它要求用户通过绝对值而不是百分比值指定范围

在 Matlab 中,我们有m = trimmean(X,percent),这正是我想要的。

我们有 Python 中的对应物吗?

4

3 回答 3

25

至少对于 scipy v0.14.0,有一个专用功能(scipy.stats.trim_mean):

from scipy import stats
m = stats.trim_mean(X, 0.1) # Trim 10% at both ends

里面使用stats.trimboth的。

源代码中可以看出,proportiontocut=0.1平均值将使用 80% 的数据进行计算。注意scipy.stats.trim_mean不能处理np.nan

于 2014-08-24T15:40:20.303 回答
9

(编辑:此答案的上下文scipy.stats.trim_mean尚未记录。现在它是公开可用的,请使用该功能而不是自己滚动。我在下面的答案保留用于历史目的。)


您也可以按照 MatLab 文档中的说明自行实现整个过程。

这是 Python 2 中的代码:

from numpy import mean
def trimmean(arr, percent):
    n = len(arr)
    k = int(round(n*(float(percent)/100)/2))
    return mean(arr[k+1:n-k])
于 2013-10-18T05:50:16.860 回答
0

这是使用数学库中的 floor 的手动实现...

def trimMean(tlist,tperc):
    removeN = int(math.floor(len(tlist) * tperc / 2))
    tlist.sort()
    if removeN > 0: tlist = tlist[removeN:-removeN]
    return reduce(lambda a,b : a+b, tlist) / float(len(tlist))
于 2019-01-22T16:55:18.240 回答