Ich habe eine np.ndarray wie folgt:m Kleinste Werte von den oberen Dreiecksmatrix mit ihrem Indizes als eine Liste von Tupeln
[[ inf 1. 3. 2. 1.]
[ inf inf 2. 3. 2.]
[ inf inf inf 5. 4.]
[ inf inf inf inf 1.]
[ inf inf inf inf inf]]
Gibt es einen Weg in die Indizes und die Werte des m kleinste Gegenstände zu erhalten Dieses nd-Array? Also, wenn ich die 4 kleinste wollte, es wäre
[(0,1,1),(0,4,1),(3,4,1),(0,3,2)]
wo (row, col, val) die Schreibweise oben ist.
Wenn mehrere Werte vorhanden sind, wird einer von ihnen zufällig ausgewählt. Zum Beispiel gab es 3 Einsen und dann nächstkleinere ist ein Wert 2, aber (0,3,2), (1,2,2), (1,4,2) waren alle möglichen Entscheidungen.
Im Wesentlichen kann ich die k kleinsten Werte in diesem Format aus der oberen Dreiecksmatrix effizient extrahieren (die Matrix ist viel größer als das obige Beispiel). Ich habe versucht, es flach zu machen, quadratische Form, klein, aber ich habe Probleme, die Indizes und Werte auszurichten. Vielen Dank!
Mögliches Duplikat von http://stackoverflow.com/questions/30577375/have-numpy-argsort-return-an-array-of-2d-indices 'np.dstack (np.unravel_index (np.argsort (tri .ravel()), arr.shape)) ' Das einzige, was übrig bleibt, ist das Zippen der Werte. – 3novak
Das könnte helfen: http://StackOverflow.com/a/10337643/149076 ... obwohl es die größten K-Elemente statt der kleinsten findet. Ein anderer, ziemlich primitiver Ansatz wäre, mit numpy.ndenumerate() eine flache Liste von Koordinaten und Werten zu generieren, die Sie in einen Heap einspeisen, bevor Sie die heapq.nsmallest() - Elemente übernehmen. –
Hat eine der veröffentlichten Lösungen für Sie funktioniert? – Divakar