Seite 1 von 1

Spezielles Sortieren eines np.arrays

Verfasst: Donnerstag 8. August 2013, 20:51
von judoloewe
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?

Re: Spezielles Sortieren eines np.arrays

Verfasst: Donnerstag 8. August 2013, 22:11
von pillmuncher

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]]

Re: Spezielles Sortieren eines np.arrays

Verfasst: Donnerstag 8. August 2013, 22:48
von judoloewe
Vielen Dank!