W przypadku, gdy istnieje wiele pozycji o równie dużych wartościach, czy potrzebujesz ich wszystkich, czy tylko pierwszej (lub ostatniej lub dowolnej)?
(edytuj) Miałem na myśli starą odpowiedź, która została usunięta . Zaakceptowana odpowiedź przyszła po mojej. Zgadzam się, że argmaxto lepsze niż moja odpowiedź.
Czy nie byłoby bardziej czytelne / intuicyjne, aby to zrobić?
numpy.nonzero(a.max() == a)
(array([1]), array([0]))
Niepotrzebnie wolno, ponieważ obliczasz maksimum, a następnie porównujesz je ze wszystkimi. unravel_index (a.argmax (), a.shape).
Peter
Głosowałem za tym, ponieważ nie zakłada nic o liczbie wystąpień a.max () w a. Natomiast a.argmax () zwróci „pierwsze” wystąpienie (które jest źle zdefiniowane w przypadku tablicy wielowymiarowej, ponieważ zależy od wyboru ścieżki przejścia). docs.scipy.org/doc/numpy/reference/generated/… Myślę też, że np.where () jest bardziej naturalnym / czytelnym wyborem niż np.nonzero ().
FizxMike
2
Możesz po prostu napisać funkcję (która działa tylko w 2d):
defargmax_2d(matrix):
maxN = np.argmax(matrix)
(xD,yD) = matrix.shape
if maxN >= xD:
x = maxN//xD
y = maxN % xD
else:
y = maxN
x = 0return (x,y)
Odpowiedzi:
argmax()
Metoda powinna pomóc.Aktualizacja
(Po przeczytaniu komentarza) Uważam, że
argmax()
metoda będzie działać również dla tablic wielowymiarowych. Dołączona dokumentacja zawiera przykład:>>> a = array([[10,50,30],[60,20,40]]) >>> maxindex = a.argmax() >>> maxindex 3
Zaktualizuj 2
(Dzięki komentarzowi Kenny'egoTM ) Możesz użyć,
unravel_index(a.argmax(), a.shape)
aby pobrać indeks jako krotkę:>>> from numpy import unravel_index >>> unravel_index(a.argmax(), a.shape) (1, 0)
źródło
unravel_index(a.argmax(), a.shape)
do pobierania indeksu jako krotki.(edytuj) Miałem na myśli starą odpowiedź, która została usunięta . Zaakceptowana odpowiedź przyszła po mojej. Zgadzam się, że
argmax
to lepsze niż moja odpowiedź.Czy nie byłoby bardziej czytelne / intuicyjne, aby to zrobić?
numpy.nonzero(a.max() == a) (array([1]), array([0]))
Lub,
numpy.argwhere(a.max() == a)
źródło
Możesz po prostu napisać funkcję (która działa tylko w 2d):
def argmax_2d(matrix): maxN = np.argmax(matrix) (xD,yD) = matrix.shape if maxN >= xD: x = maxN//xD y = maxN % xD else: y = maxN x = 0 return (x,y)
źródło
Alternatywnym sposobem jest zmiana
numpy
tablicy nalist
oraz użyciemax
iindex
metody:List = np.array([34, 7, 33, 10, 89, 22, -5]) _max = List.tolist().index(max(List)) _max >>> 4
źródło