Как найти последнее вхождение максимального значения в 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