Как найти последнее вхождение максимального значения в numpy.ndarray

у меня есть numpy.ndarray, в котором максимальное значение в основном будет происходить более одного раза.

EDIT: это тонко отличается от и NumPy.argmax: как получить индекс, соответствующий *последнему* вхождению, в случае нескольких вхождений максимальных значений потому что автор говорит

или, еще лучше, можно ли получить список индексов всех вхождений максимального значения в массиве?

а в моем случае получение такого списка может оказаться очень дорого

можно ли найти индекс последнего вхождения максимального значения, используя что-то вроде numpy.argmax? Я хочу найти только индекс последнего вхождения, а не массив всех вхождений (так как там может быть несколько сотен)

например, это вернет индекс первого вхождения ie 2

import numpy as np
a=np.array([0,0,4,4,4,4,2,2,2,2])
print np.argmax(a)

однако я хочу, чтобы он вывел 5.

2 ответов


numpy.argmax возвращает индекс первого вхождения. Вы можете подать заявку argmax к обращенному виду массива:

import numpy as np
a = np.array([0,0,4,4,4,4,2,2,2,2])
b = a[::-1]
i = len(b) - np.argmax(b) - 1
i     # 5
a[i:] # array([4, 2, 2, 2, 2])

Примечание numpy не копирует массив, а вместо этого создает представление оригинала с шаг, которая обращается к нему в обратном порядке.

id(a) == id(b.base) # True

если Ваш массив состоит из целых чисел и имеет менее 1e15 строк. Вы также можете отсортировать это, добавив функцию шума, которая линейно увеличивает значение более поздних вхождений.

>>>import numpy as np
>>>a=np.array([0,0,4,4,4,4,2,2,2,2])
>>>noise= np.array(range(len(a))) * 1e-15
>>>print(np.argmax(a + noise))
5