我试图计算一个数组的修整平均,它不包括异常值。
我发现有一个名为scipy.stats.tmean
的模块,但它要求用户根据绝对值而不是百分比值指定范围。
在Matlab中,我们有m = trimmean(X,percent)
,这正是我想要的。
我们有对应的Python吗?
发布于 2014-08-24 15:40:20
至少对于ciplyv0.14.0,有一个专用的函数(均值):
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
。
发布于 2013-10-18 05:50:16
(编辑:这个答案的上下文是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])
发布于 2019-01-22 16:55:18
这里有一个使用数学库地板的手动实现..。
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))
https://stackoverflow.com/questions/19441730
复制相似问题