Numpy Matrix filtern

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

Hallo Zusammen,

ich bekomme aus einer Rechnung Ergebnisse, die ich gerne der Größe nach filtern möchte.
Konkret möchte ich die Y-Values der Größe nach sortieren und dabei mir die dazugehörigen X -Values ausgeben lassen.
Ich habe es mit
argsort
wie im Beispiel Code beschrieben versucht, jedoch nicht mit dem gewünschten Erfolg.

Hat jemand eine Idee, wie man es besser machen könnte?
Vielen Dank.

Code: Alles auswählen

import numpy as np

x_values=np.array([1,2,3,4,5,6])
y_values=np.array([1,4,6,8,9,2])
x = np.append(x_values,y_values).reshape((2,6))
# x[x[:, 1].argsort()]
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Am Anfang schreibst Du, Du hast x- und y-Werte, dann aber sortierst Du den zweiten Wert von x und den zweiten Wert von y.
Wenn etwas nicht so funktioniert wie gewünscht, muß man den komplizierten Ausdruck in einfache aufteilen, also erst mal

Code: Alles auswählen

print(x[:, 1])
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

Habe mich jetzt mal von innen nach außen durch iteriert & nun funktioniert es:

Code: Alles auswählen

import numpy as np

x_values=np.array([3,2,3,4,6,5])
y_values=np.array([1,4,6,8,9,2])
x = np.append(x_values,y_values).reshape((2,6))
x[0,:][x[1,:].argsort()]
Ausgabe: array([3, 5, 2, 3, 4, 6])


Danke.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Das mit dem reshape ist nicht schön, richtig wäre vstack:

Code: Alles auswählen

x = np.vstack([x_values, y_values])
Da Du gar nicht die Kombination aus x- und y-Werten brauchst, kannst Du das weiter deutlich vereinfachen:

Code: Alles auswählen

x_values[y_values.argsort()]
scandium
User
Beiträge: 25
Registriert: Montag 26. Januar 2015, 18:52

Danke, das ist noch besser.
Antworten