Ho un array NumPy bidimensionale. So come ottenere i valori massimi sugli assi:
>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])
Come posso ottenere gli indici degli elementi massimi? Quindi vorrei come outputarray([1,1,0])
Ho un array NumPy bidimensionale. So come ottenere i valori massimi sugli assi:
>>> a = array([[1,2,3],[4,3,1]])
>>> amax(a,axis=0)
array([4, 3, 3])
Come posso ottenere gli indici degli elementi massimi? Quindi vorrei come outputarray([1,1,0])
Risposte:
>>> import numpy as np
>>> a = np.array([[1,2,3],[4,3,1]])
>>> i,j = np.unravel_index(a.argmax(), a.shape)
>>> a[i,j]
4
a = np.array([[1,4,3],[4,3,1]])
per vedere che ritorna i,j==0,1
e trascura la soluzione a i,j==1,0
. Per gli indici di tutti i massimi utilizzare invece i,j = where(a==a.max()
.
argmax()
restituirà solo la prima occorrenza per ogni riga.
http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html
Se hai mai bisogno di farlo per un array sagomato, funziona meglio di unravel
:
import numpy as np
a = np.array([[1,2,3], [4,3,1]]) # Can be of any shape
indices = np.where(a == a.max())
Puoi anche modificare le tue condizioni:
indices = np.where(a >= 1.5)
Quanto sopra ti dà i risultati nella forma che hai richiesto. In alternativa, puoi convertire in un elenco di coordinate x, y tramite:
x_y_coords = zip(indices[0], indices[1])
indices = np.where(a==a.max())
nella riga 3?
.max()
invece di .argmax()
. Modifica la risposta
x_y_coord = [(0, 2), (1, 1)]
che NON corrisponde alla risposta di @eumiro ed è sbagliata. Ad esempio, prova con a = array([[7,8,9],[10,11,12]])
per vedere che il tuo codice non ha alcun riscontro su questo input. Dici anche che funziona meglio di unravel
, ma la soluzione postata da @blas risponde al problema del massimo assoluto, non lungo un asse.