2012-12-08 7 views
7

Quindi ho questo elenco chiamato sumErrors che è 16000 righe e 1 colonna e questo elenco è già preordinato in 5 diversi cluster. E quello che sto facendo è affettare la lista per ogni cluster e trovare l'indice del valore minimo in ogni fetta.Trovare gli indici dei primi tre valori via argmin() o min() in python/numpy senza la mutazione dell'elenco?

Tuttavia, posso solo trovare il primo indice minimo utilizzando argmin(). Non penso di poter cancellare il valore, perché altrimenti cambierebbe le fette e gli indici sono ciò che devo recuperare l'ID originale. Qualcuno sa come ottenere argmin() per sputare gli indici per i tre più bassi?

O forse un metodo più ottimale? Forse dovrei solo assegnare i numeri ID, ma mi sembra che ci sia forse un metodo più elegante.

risposta

9

Numpy include una funzione argsort che restituisce tutti gli indici. Se ho capito bene il vostro requisito, si dovrebbe essere in grado di fare:

minidx = [] 
for cluster in sumErrors: 
    minidx.append(np.argsort(cluster)[:3]) 
+0

OOOOOH Ho passato così tanto tempo a lavorarci su. Sapevo che doveva essere stato un modo facile. Grazie mille! – Shinjitsu

1

numpy.argpartition (cluster, 3) sarebbe molto più efficace.

Problemi correlati