Ich versuche, die Indizes dazu zu bringen, ein mehrdimensionales Array nach der letzten Achse zu sortieren, z. B.
%Vor% Und ich möchte die Indizes i
so,
Basierend auf der Dokumentation von numpy.argsort dachte ich, es sollte funktionieren dies, aber ich bekomme den Fehler:
%Vor% Bearbeiten: Ich muss andere Arrays der gleichen Form (z. B. ein Array b
so, dass a.shape == b.shape
) auf die gleiche Weise neu anordnen ... so dass
Lösung:
%Vor%Sie haben es richtig verstanden, obwohl ich es nicht so beschreiben würde, als würde es die Indexierung betrügen.
Vielleicht wird es helfen, es klarer zu machen:
%Vor% i
ist die Reihenfolge, die wir für jede Zeile wünschen. Das ist:
Um beide Indexierungsschritte gleichzeitig auszuführen, müssen wir einen Spaltenindex für die 1. Dimension verwenden.
%Vor% Ein weiteres Array, das mit i
gepaart werden könnte, ist:
Wenn i
die Spalte für jedes Element angibt, gibt j
die Zeile für jedes Element an. Das Spaltenfeld [[0],[1]]
funktioniert genauso gut, da es gegen i
gesendet werden kann.
Ich denke an
%Vor% als 'kurze Hand' für j
. Zusammen definieren sie die Quellzeile und -spalte jedes Elements des neuen Arrays. Sie arbeiten zusammen, nicht sequentiell.
Die vollständige Zuordnung von a
zum neuen Array lautet:
Ich fand die Antwort hier , mit jemandem, der das gleiche Problem hatte. Der Schlüssel ist nur die Indexierung zu betrügen, um richtig zu funktionieren ...
%Vor% Sie können auch linear indexing
verwenden könnte besser mit der Leistung sein, so -
Also, a.argsort(1)+(np.arange(M)[:,None]*N)
sind im Grunde die linearen Indizes, die verwendet werden, um b
abzubilden, um die gewünschte sortierte Ausgabe für b
zu erhalten. Dieselben linearen Indizes könnten auch für a
verwendet werden, um die sortierte Ausgabe für a
zu erhalten.
Beispiellauf -
%Vor%Rumtime Tests -
%Vor%Tags und Links python arrays numpy sorting numerical-methods