Sortierungsproblem mit NumPy

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
E1986
User
Beiträge: 19
Registriert: Samstag 3. Mai 2014, 17:43

Hey Leute.
Ich möchte mit NumPy folgenden Input nach den Werten aus der 1. Zeile absteigend sortieren. Die restlichen (jeweils zugehörigen) Werte in der Spalte sollen „mit rutschen“. Mein Output passt fast, nur dass die niedrigste Wert (in der ersten Zeile) ganz vorne steht, dann kommt der Höchste, usw. Die vordere Spalte müsste also eigentlich ganz rechts stehen (niedrigster Wert ganz rechts da eben absteigend sortiert werden soll).
In dem Schritt „idx=-np.argsort(arraysort)“ macht er nen Fehler rein. Vorher ist die Sortierung noch richtig. Könnte sich das jemand bitte mal anschauen und mir sagen, wo da der Fehler liegt, bzw. wie ich das richtig anstelle, oder es vielleicht besser geht?

Input:

[['1' '2' '4' '5' '6' '7' '8' '10' '11' '12']
['25.18' '27.32' '28.19' '32.53' '33.18' '18.29' '20.56' '21.04' '24.14'
'19.56']
['650' '0' '0' '0' '1120' '790' '950' '820' '0' '950']
['650' '0' '0' '0' '1120' '790' '950' '820' '0' '950']
['650' '0' '0' '0' '1120' '790' '950' '820' '0' '950']
['650' '0' '320' '680' '0' '790' '950' '820' '0' '950']
['650' '0' '320' '680' '0' '790' '950' '820' '0' '950']
['650' '0' '320' '0' '0' '790' '950' '820' '0' '950']
['650' '0' '0' '0' '1120' '790' '950' '820' '0' '950']
['650' '0' '0' '0' '0' '790' '950' '820' '0' '950']
['650' '0' '0' '0' '1120' '790' '950' '820' '0' '950']
['650' '0' '0' '0' '1120' '790' '950' '820' '0' '950']]

array=data_f[1]
arraysort=np.argsort(array) -> hier ist die Sortierung noch richtig!
idx=-np.argsort(arraysort) -> der Output dieser Zeile stimmt nicht mehr!
arraysort_final=data_f[:,idx]

Output:

[['7' '6' '5' '4' '2' '1' '11' '10' '8' '12']
['18.29' '33.18' '32.53' '28.19' '27.32' '25.18' '24.14' '21.04' '20.56'
'19.56']
['790' '1120' '0' '0' '0' '650' '0' '820' '950' '950']
['790' '1120' '0' '0' '0' '650' '0' '820' '950' '950']
['790' '1120' '0' '0' '0' '650' '0' '820' '950' '950']
['790' '0' '680' '320' '0' '650' '0' '820' '950' '950']
['790' '0' '680' '320' '0' '650' '0' '820' '950' '950']
['790' '0' '0' '320' '0' '650' '0' '820' '950' '950']
['790' '1120' '0' '0' '0' '650' '0' '820' '950' '950']
['790' '0' '0' '0' '0' '650' '0' '820' '950' '950']
['790' '1120' '0' '0' '0' '650' '0' '820' '950' '950']
['790' '1120' '0' '0' '0' '650' '0' '820' '950' '950']]
BlackJack

@E1986: Du sortierst die ”sortierten” Indizes, was irgendwie keinen Sinn macht, denn diese Sortierung hat ja rein gar nichts mit den Werten in dem ursprünglichen Array zu tun. Du willst das Ergebnis vom ersten `argsort()` ”spiegeln”. Schau Dir mal `numpy.fliplr()` an.
Antworten