2013-09-02 17 views
21

Sono un po 'confuso leggendo la documentazione di argmin function in numpy. sembra che dovrebbe fare il lavoro:Come restituire tutti gli indici minimi in numpy

La lettura di questo

ritorno gli indici dei valori minimi lungo un asse.

potrei supporre che

np.argmin([5, 3, 2, 1, 1, 1, 6, 1]) 

restituirà un array di tutti gli indici: che sarà [3, 4, 5, 7]

Ma invece di questo restituisce solo 3. Dov'è il trucco, o cosa dovrei fare per ottenere il mio risultato?

risposta

31

Questa documentazione ha più senso quando si pensa agli array multidimensionali.

>>> x = numpy.array([[0, 1], 
...     [3, 2]]) 
>>> x.argmin(axis=0) 
array([0, 0]) 
>>> x.argmin(axis=1) 
array([0, 1]) 

Con un asse specificato, argmin prende sottoschiere unidimensionale lungo l'asse determinato e restituisce il primo indice di valore minimo di ciascuna sottomatrice. Non restituisce tutti gli indici di un singolo valore minimo.

Per ottenere tutti gli indici del valore minimo, si potrebbe fare

numpy.where(x == x.min()) 
13

vedere la documentazione numpy.argmax (cui si fa riferimento per la documentazione per numpy.argmin):

Nel caso di più occorrenze dei valori massimi, vengono restituiti gli indici corrispondenti alla prima occorrenza.

Il fraseggio della documentazione ("indici" anziché "indice") fa riferimento al caso multidimensionale quando viene fornito il numero axis.

Quindi, non è possibile farlo con np.argmin. Invece, funzionerà:

np.where(arr == arr.min()) 
Problemi correlati