API · NumPy

Python numpy.argmax()

La funzione numpy.argmax() restituisce gli indici dei valori con i valori più alti nell'array NumPy specificato.

In questa pagina

In NumPy, numpy.argmax() restituisce l’indice di un valore massimo in un array, non il valore stesso. Usa l’indice per recuperare il valore oppure specifica un axis per ottenere un indice per ogni sezione. Se più valori condividono il massimo, viene restituita la prima occorrenza.

Come numpy.argmax() seleziona l’indice di un valore massimo

Con il valore predefinito axis=None, numpy.argmax() esamina l’array come se gli elementi formassero un’unica sequenza appiattita. Per un input multidimensionale, l’indice restituito indica quindi una posizione in questa sequenza. Se specifichi un asse, la ricerca avviene lungo quella dimensione e restituisce gli indici per le sezioni rimanenti.

Sintassi e parametri

La firma della funzione è numpy.argmax(a, axis=None, out=None). L’argomento a è l’array di input o un oggetto simile a un array. axis seleziona la dimensione in cui eseguire la ricerca; se omesso o impostato su None, l’input viene prima appiattito. In un array bidimensionale, axis=0 cerca lungo ciascuna colonna e restituisce gli indici di riga, mentre axis=1 cerca lungo ciascuna riga e restituisce gli indici di colonna. L’asse selezionato viene rimosso dalla forma del risultato.

L’argomento opzionale out è un array in cui viene scritto il risultato. La sua forma deve corrispondere a quella del risultato e il suo tipo di dato deve poter contenere gli indici restituiti. La funzione restituisce l’indice o l’array di indici: usa queste posizioni per accedere ai corrispondenti valori massimi.

Trovare l’indice di un valore massimo in array monodimensionali e multidimensionali

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

a = np.array([2, 6, 1, 5])
index = np.argmax(a)
print(index)
print(a[index])
1
6

Qui il valore massimo è 6 e la sua posizione è 1, perché gli indici di NumPy partono da zero. Per un array multidimensionale, il comportamento predefinito restituisce comunque una singola posizione nell’array appiattito, non una coppia di indici di riga e colonna. Se ti servono le coordinate nella forma originale, converti quella posizione con numpy.unravel_index.

import numpy as np

a = np.array([[2, 1, 6],
              [7, 4, 5]])
index = np.argmax(a)
print(index)
print(np.unravel_index(index, a.shape))
3
(np.int64(1), np.int64(0))

La posizione 3 nell’array appiattito corrisponde alla riga 1 e alla colonna 0, dove si trova il valore 7.

Scegliere un asse per trovare gli indici lungo ciascuna sezione

Per un array bidimensionale con forma (2, 3), axis=0 riduce la dimensione delle righe: l’output contiene un indice di riga per ogni colonna. axis=1 riduce la dimensione delle colonne: l’output contiene un indice di colonna per ogni riga. Sono posizioni all’interno di ciascuna sezione esaminata, non posizioni nell’array originale appiattito.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

a = np.array([[2, 1, 6],
              [7, 4, 5]])
print(np.argmax(a, axis=0))
print(np.argmax(a, axis=1))
[1 1 0]
[2 0]

Per esempio, l’elemento più grande della prima colonna è 7, all’indice di riga 1; l’elemento più grande della prima riga è 6, all’indice di colonna 2.

Gestire i valori a pari merito e usare l’indice restituito

Se il valore massimo compare più di una volta, numpy.argmax() restituisce la prima posizione corrispondente nell’ordine di ricerca. Quando specifichi un asse, questa regola si applica indipendentemente a ciascuna sezione. L’esempio monodimensionale seguente mostra la posizione restituita e il valore che si trova lì.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

a = np.array([2, 6, 1, 6])
index = np.argmax(a)
print(index)
print(a[index])
1
6

Entrambi i valori massimi sono 6, ma l’indice 1 precede l’indice 3. In una ricerca multidimensionale senza asse, «prima» indica l’ordine dell’array appiattito; con un asse, indica l’ordine all’interno di ciascuna sezione.

Scrivere il risultato in out

Usa out per scrivere il risultato in un array esistente. La sua forma deve corrispondere a quella del risultato: un array con forma scalare va bene per un risultato scalare, mentre una ricerca lungo un asse richiede un array con la forma dell’output. Scegli un tipo di dato intero in grado di rappresentare gli indici. La chiamata restituisce anche lo stesso risultato che scrive in out.

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

a = np.array([[2, 1, 6],
              [7, 4, 5]])
result = np.empty((), dtype=np.intp)
np.argmax(a, out=result)
print(result)
3

Per questa ricerca predefinita, il risultato ha forma scalare, quindi result è un array a zero dimensioni. Se specifichi un asse, crea out con la forma dell’array di indici risultante.