Spezielles Sortieren eines np.arrays

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
judoloewe
User
Beiträge: 2
Registriert: Donnerstag 8. August 2013, 20:41

Ich habe ein Array das wie folgt aussieht:

array([[ 2. , 3. , 1. , 9. , 5. , ... ],
[ 0.33, 0.62, 0.51, 0.34, 0.94, ...]])

Ich würde dieses nun nach einer der beiden Zeilen sortieren, so dass die andere Zeile sich mit verändert. Also die Zahlen die zusammen gehören immer noch zusammen sind. Das Ergebnis soll nach Zeile 1 so aussehen:

array([[ 1. , 2. , 3. , 5. , 9. , ... ],
[ 0.51, 0.33, 0.62, 0.94, 0.34, ...]])

oder nach Zeile 2 so:

array([[ 2. , 9. , 1. , 3. , 5. , ... ],
[ 0.33, 0.34, 0.51, 0.62, 0.94, ...]])

Kann mir jemand helfen?
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

Code: Alles auswählen

a = np.array([[3, 2, 1], [5, 4, 6]])
b = a.transpose()
for key in [0, 1]:
    a[:] = b[b[:, key].argsort()].transpose()
    print(a)
    print()
Python 3, mit diesem Resultat:

Code: Alles auswählen

[[1 2 3]
 [6 4 5]]

[[2 3 1]
 [4 5 6]]
Aber man könnte sich das wiederholte Transponieren auch sparen, indem man gleich sowas macht:

Code: Alles auswählen

a = np.array([[3, 2, 1], [5, 4, 6]]).transpose()
for key in [0, 1]:
    a[:] = a[a[:, key].argsort()]
    print(a)
    print()
Resultat:

Code: Alles auswählen

[[1 6]
 [2 4]
 [3 5]]

[[2 4]
 [3 5]
 [1 6]]
In specifications, Murphy's Law supersedes Ohm's.
judoloewe
User
Beiträge: 2
Registriert: Donnerstag 8. August 2013, 20:41

Vielen Dank!
Antworten