argsort für ein multidimensionales ndarray

9

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,

%Vor%

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

%Vor%     
DilithiumMatrix 15.10.2015, 05:38
quelle

3 Antworten

10

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:

%Vor%

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:

%Vor%

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:

%Vor% %Vor%     
hpaulj 15.10.2015, 06:20
quelle
5

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%     
DilithiumMatrix 15.10.2015 05:50
quelle
1

Sie können auch linear indexing verwenden könnte besser mit der Leistung sein, so -

%Vor%

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%     
Divakar 15.10.2015 06:30
quelle