值超过阈值时的python平均值数组(如果为平均值)

时间:2018-10-02 01:28:26

标签: python arrays python-2.7 numpy mean

我有一个一维数组,我想获得所有大于某个阈值的平均值。在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函数?

谢谢

2 个答案:

答案 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