2016-04-27 20 views
1

I verstanden, dass ein numpy Array arr säulenchromatographisch (nur für eine bestimmte Spalte, beispielsweise seine 2. Spalte) Sortieranlage mit getan werden kann:Sortierung ein Array von Zeilen in Python

arr[arr[:,1].argsort()] 

wie ich dies verstanden Codebeispiel funktioniert: argsort sortiert die Werte der 2. Spalte von arr und gibt die entsprechenden Indizes als ein Array. Dieses Array wird arr als Zeilennummern gegeben. Bin ich in meiner Interpretation richtig?

Jetzt frage ich mich, wenn ich das Array arr in Bezug auf die 2. Reihe statt der 2. Spalte sortieren möchte? Ist es am einfachsten, das Array vor dem Sortieren zu transponieren und es nach dem Sortieren zurück zu transponieren, oder gibt es eine Möglichkeit, es wie zuvor zu tun (indem wir ein Array mit der Anzahl der Spalten angeben, die wir anzeigen wollen)?

Anstatt (n,n)array[(n,)array] zu tun (n ist die Größe des 2d-Array) Ich habe versucht, etwas wie (n,n)array[(n,1)array] zu tun, um die Nummern der Spalten anzuzeigen, aber es funktioniert nicht.

Beispiel von dem, was ich will:

arr = [[11,25],[33,4]] => Basis Array

arr_col2=[[33,4],[11,25]] => array ich mit argsort() bekam

arr_row2=[[25,11],[4,33]] => Array habe ich versucht, mit argsort() auf einfache Art und Weise zu bekommen, aber war nicht erfolgreich

+0

Mögliches Duplikat von [Wie sortiere ich 2d Array für Zeile in Python?] (Http: // stackoverflow.com/questions/2173797/how-to-sort-2d-array-by-row-in-python) – Stefano

+0

Ich vermute, dass dies ein numpy Array ist, kein Vanillepython-Array - in diesem Fall ist es kein Duplikat dieser Frage (obwohl wahrscheinlich schon woanders gefragt wurde) –

+0

Es ist in der Tat kein Duplikat. Was ich will, ist zu wissen, ob es einen ähnlichen Weg zu der Methode gibt, die ich beschrieben habe, um ein numpliges Array in einer bestimmten Zeile zu sortieren, ohne die Spalten zu mischen (statt eine Spalte zu sortieren). Die Hauptsache, die ich nicht bekomme, ist, wie 2dray [1darray] funktioniert. – JoVe

Antwort

1

Ich nehme an, dass arr ein numpy Array ist? Ich habe die Syntax arr[:,1] in keinem anderen Kontext in Python gesehen. Es wäre erwähnenswert in Ihrer Frage!

Unter der Annahme, dies der Fall ist, dann sollten Sie

arr.sort(axis=0) 

durch Spalte zu sortieren und

arr.sort(axis=1) 

von Zeile sortieren verwendet werden. (Beide Art an Ort und Stelle, dh den Wert arr ändern. Wenn Sie dies nicht möchten, dass Sie arr in eine andere Variable zuerst kopieren und anwenden sort darauf.)

Wenn Sie wollen einfach nur eine sortieren einreihig (in diesem Fall der zweite) dann

funktioniert.

Edit: Ich verstehe jetzt, welches Problem Sie versuchen zu lösen. Sie möchten die Spalten in der Matrix neu anordnen, so dass die Zeile in aufsteigender Reihenfolge geht. Sie können dies einfach durch

arr[:,arr[1,:].argsort()] 

(wo hier sortieren wir durch die zweite Reihe) tun.

+0

Sie haben richtig angenommen =). Allerdings habe ich versucht, die Art zu sortieren, die Sie vor der Verwendung der beschriebenen Methode (schien mehr logisch ...) zu sortieren, aber es sortiert alle Zeilen oder alle Spalten, während ich nur eine bestimmte Spalte sortieren möchte, ohne die Zeilen zu mischen . Und ich wollte wissen, ob es eine Möglichkeit gäbe, eine bestimmte Zeile auf die gleiche Art und Weise zu sortieren mit argsort – JoVe

+0

Ich habe meine Antwort aktualisiert, um das zu beantworten - wieder denke ich immer noch nicht, dass argsort der richtige Weg ist! –

+0

Dann ist es wieder nicht das, was ich will, da ich möchte, dass die Zeilen gleich bleiben. Mit 'arr [1,:]. Sort() 'wird die Spalte 2 sortiert, aber die Spalte 1 nicht, wodurch die Zeilen im Vergleich zum unsortierten Array durcheinander geraten. Verstehst du, was ich meine ? – JoVe