我有一个一维数组,我想获得所有大于某个阈值的平均值。在excel中,等效值为
= AVERAGEIF(range,">6")
在python中,我想到了可以正常工作的代码行,但是我想知道是否有更好的方法编写代码
a = np.array([5.0, 6.0, 7.0, 8.0, 9.0, 0.0, 1.0, 2.0, 3.0, 4.0])
indice = 6
b = sum(i for i in a if i > indice)/sum(a > indice)
print b
>>> 8.0
是否有更聪明的方法或使用一些numpy函数?
谢谢
答案 0 :(得分:3)
这不是最直接的方法(@coldspeed的回答解决了这个问题),但是我试图以娱乐为目的来考虑替代方法。使用np.average
,将权重设置为a > 6
中的布尔数组:
>>> np.average(a, weights=a>6)
8.0
答案 1 :(得分:2)
掩盖无效值并计算掩码数组中的均值:
>>> np.ma.masked_where(a <= 6, a).mean()
8.0
如果要使用遮罩执行其他操作,则遮罩的数组很有用。或者,您可以预先过滤:
>>> a[a > 6].mean()
8