2013-10-23 7 views
14

Ho bisogno di trovare l'indice di più di un valore minimo che si verifica in una matrice. Sono abbastanza conosciuto con np.argmin ma mi dà l'indice del primo valore minimo in un array. Per esempio.Trova l'indice dei valori minimi nell'array dato in Python

a = np.array([1,2,3,4,5,1,6,1])  
print np.argmin(a) 

Questo mi dà 0, invece mi aspetto, 0,5,7.

Grazie!

+6

Prova 'np.where (a == a.min())' –

+0

Yup! questo lavoro. – user2766019

+0

possibile duplicato di [Ottenere l'indice della voce max o min restituita usando max()/min() su una lista] (http://stackoverflow.com/questions/2474015/getting-the-index-of-the- return-max-or-min-item-using-max-min-on-a-list) – mlt

risposta

20

Questo dovrebbe fare il trucco:

a = np.array([1,2,3,4,5,1,6,1]) 
print np.where(a == a.min()) 

argmin non restituisce una lista come ci si aspetta di in questo caso.

+1

No, non funziona. Inoltre, stai sovrascrivendo una funzione predefinita 'min'. –

+1

@BasSwinckels hai perso la mia modifica. min regolare funziona bene come hai sottolineato. –

3

Forse

mymin = np.min(a) 
min_positions = [i for i, x in enumerate(a) if x == mymin] 

Darà [0,5,7].

+0

No, non lo è, dal momento che stai comparando all'indice del min, che è 0. –

+0

MODIFICATO, usa min invece di argmin, mi dispiace. – tonjo

+0

funziona ora, quindi il voto basso è inappropriato;) – tonjo

1

penso che questo sarebbe il modo più semplice, anche se non fa uso di alcuna funzione NumPy fantasia

a  = np.array([1,2,3,4,5,1,6,1])           
min_val = a.min()                

print "min_val = {0}".format(min_val)           

# Find all of them               
min_idxs = [idx for idx, val in enumerate(a) if val == min_val]    
print "min_idxs = {0}".format(min_idxs) 
Problemi correlati