Как найти индекс максимального значения бесконечности в массиве numpy? - PullRequest
0 голосов
/ 04 февраля 2019

Я хотел бы найти индекс наибольшего значения в одномерном массиве, который не равен бесконечности.Я пробовал argmax, но когда в моем массиве есть значение бесконечности, он просто возвращает этот индекс.Код, который я придумал, кажется довольно хакерским и небезопасным.Есть ли лучшее решение?

import numpy as np
Y=np.array([2.3,3.5,np.inf,4.4,np.inf,2.5])

idx=np.where(Y==np.max(Y[np.isfinite(Y)]))[0][0]

Ответы [ 3 ]

0 голосов
/ 04 февраля 2019

Вот как бы я это сделал.Преобразуйте все inf в наименьшее число в массиве, затем найдите максимальное значение, используя argmax:

Y = np.array([2.3, 3.5, np.inf, 4.4, np.inf, 2.5])
Y[Y == np.inf] = np.min(Y)
print(np.argmax(Y))
0 голосов
/ 04 февраля 2019

Вы можете использовать argmax для массива с маской, с отрицательным np.inf:

import numpy as np

Y = np.array([2.3, 3.5, np.inf, 4.4, np.inf, 2.5], dtype=np.float32)
masked_Y = np.ma.array(Y, mask=~np.isfinite(Y))

idx = np.ma.argmax(masked_Y, fill_value=-np.inf)
print(idx)

Выход

3
0 голосов
/ 04 февраля 2019

Один из способов - преобразовать Inf в отрицательное Inf и использовать argmax() -

np.where(np.isinf(Y),-np.Inf,Y).argmax()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...