Python 中的截尾平均值

Trimmed mean in Python

我正在尝试计算 python 中具有 手动函数的列表的 修剪平均值 但我不知道'知道我必须如何调整我的公式。

我希望您可以为函数提供一个 alpha 参数,例如0.1(减少 10% 异常值)。

到目前为止我的代码(0.1 在这种情况下是 alpha 值):

lst[5,30,29,15,25,5,13,28,24,29] #for alpha=0.1 the list need to be adjusted --> lst[5,13,15,24,25,28,29,29]

def tmean(lst):
  s= sorted(lst)
  k= 0.1*len(lst)
  trimmed_mean= (1/(len(lst)-(2*k)))*sum(len(lst)-k)
  print(trimmed_mean)

alpha=0.1 的 trimmed_mean 应该是 21,但我不知道如何调整我的代码。

谢谢。

lst = [5,30,29,15,25,5,13,28,24,29]

def tmean(lst, alpha):
    s = sorted(lst)
    # Caclculate number of elements to trim from the beginning and end
    a = round(alpha * len(lst)
    # Check if alpha can actually remove any elements and if not return straight mean
    if a == 0:
        return sum(lst) / len(lst)
    # Remove trimmed elements from the list
    trimmed_list = s[a:-a]
    # Check if there is a list left after trimming
    if len(trimmed_list) == 0:
        return
    # Calculate average on the new list
    trimmed_ave = sum(trimmed_list)/len(trimmed_list)
    print(trimmed_ave)
    return trimmed_ave

tmean(lst, 0.1)

显然,上面的一些阶段可以组合起来以获得更简洁的代码,但为了便于解释,已拆分为单独的行