Как найти последнее вхождение максимального значения в numpy.ndarray - PullRequest
12 голосов
/ 07 января 2012

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

РЕДАКТИРОВАТЬ: Это слегка отличается от numpy.argmax: как получить индекс, соответствующий *последнее * вхождение, в случае множественных вхождений максимальных значений , потому что автор говорит

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

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

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

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

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

Однако я хочу вывести 5.

Ответы [ 2 ]

23 голосов
/ 07 января 2012

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
1 голос
/ 07 августа 2018

Если ваш массив состоит из целых чисел и имеет менее 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...