средний массив Python, когда значение превышает пороговое значение (среднее значение, если) - PullRequest
0 голосов
/ 02 октября 2018

У меня есть одномерный массив, и я хочу получить среднее значение для всех значений, превышающих определенный порог.В 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

Если есть какой-нибудь более умный способ сделать это, или использовать какую-нибудь непонятную функцию?

Спасибо

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Это не самый простой способ (ответ @ coldspeed об этом позаботится), но я пытался придумать альтернативы просто для удовольствия.Используйте np.average, устанавливая веса для логического массива от a > 6:

>>> np.average(a, weights=a>6)
8.0
0 голосов
/ 02 октября 2018

Маскируйте недопустимые значения и вычисляйте среднее значение для маскируемого массива:

>>> np.ma.masked_where(a <= 6, a).mean()
8.0

Маскированный массив полезен, если вы хотите сделать другие действия с маской.В качестве альтернативы, вы можете просто отфильтровать заранее:

>>> a[a > 6].mean()
8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...