【问题标题】:Trimmed Mean with Percentage Limit in Python?Python中带有百分比限制的修剪平均值?
【发布时间】:2013-10-18 04:42:50
【问题描述】:

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

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

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

我们有 Python 中的对应物吗?

【问题讨论】:

标签: python


【解决方案1】:

至少对于 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

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

【讨论】:

【解决方案2】:

(编辑:这个答案的上下文是 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])

【讨论】:

    【解决方案3】:

    这是使用数学库中的 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))
    

    【讨论】:

      猜你喜欢
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-10
      • 1970-01-01
      • 1970-01-01
      • 2020-06-17
      相关资源
      最近更新 更多