2012-12-08 8 views
7

Mam więc listę o nazwie sumErrors, która ma 16000 wierszy i 1 kolumnę, a ta lista jest już sortowana na 5 różnych klastrów. I robię to, krojąc listę dla każdego klastra i znajdując indeks minimalnej wartości w każdym plasterku.Wykrywanie indeksów trzech najwyższych wartości za pomocą argmin() lub min() w python/numpy bez mutacji listy?

Jednak mogę znaleźć tylko pierwszy minimalny indeks przy użyciu argmin(). Nie sądzę, żebym mógł po prostu usunąć wartość, ponieważ w przeciwnym razie przesuwałaby ona plasterki, a indeksy są tym, co muszę odzyskać pierwotny identyfikator. Czy ktoś wie, jak uzyskać argmin(), aby wypluć indeksy dla najniższych trzech?

A może bardziej optymalna metoda? Może powinienem po prostu przypisać numery identyfikacyjne, ale wydaje mi się, że może istnieje bardziej elegancka metoda.

Odpowiedz

9

Numpy zawiera funkcję argsort, która zwróci wszystkie indeksy. Jeśli poprawnie zrozumiem twoje wymagania, powinieneś być w stanie:

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

OOOOOH Tak długo pracowałem nad tym. Wiedziałem, że musiał być łatwy sposób. Dziękuję bardzo! – Shinjitsu

1

numpy.argpartition (cluster, 3) będzie znacznie bardziej efektywny.

Powiązane problemy