Die Sortierung von Daten ist eine grundlegende Aufgabe in der numerischen Programmierung. Numpy bietet verschiedene Möglichkeiten, Arrays zu sortieren, darunter einfache Sortierungen, Sortierung nach Achsen und auch komplexere Aufgaben wie das Abrufen von Sortierindizes.
Dieses Tutorial zeigt, wie Numpy-Arrays sortiert werden können, beginnend mit einfachen Beispielen bis hin zu komplexeren Anwendungsfällen.
Die einfachste Art, ein Numpy-Array zu sortieren, ist die Verwendung der Funktion numpy.sort
. Diese Funktion gibt ein neues sortiertes Array zurück, ohne das Original-Array zu verändern.
import numpy as np
# Ein unsortiertes 1D-Array erstellen
array = np.array([5, 3, 8, 1, 9, 2])
# Sortierung des Arrays
sorted_array = np.sort(array)
# Visualisierung der Ergebnisse
print("Originales Array:", array)
print("Sortiertes Array:", sorted_array)
Ausgabe:
Originales Array: [5 3 8 1 9 2]
Sortiertes Array: [1 2 3 5 8 9]
In diesem Beispiel wird ein eindimensionales Array sortiert, das Ergebnis ist ein neues, sortiertes Array.
Für mehrdimensionale Arrays kann numpy.sort
verwendet werden, um das Array entweder zeilen- oder spaltenweise zu sortieren. Standardmäßig erfolgt die Sortierung entlang der letzten Achse (Spalten).
# Ein unsortiertes 2D-Array erstellen
array_2d = np.array([[3, 7, 2], [9, 1, 5], [6, 8, 4]])
# Sortierung entlang der letzten Achse (spaltenweise)
sorted_array_2d = np.sort(array_2d)
# Visualisierung des originalen und sortierten Arrays
print("Originales 2D-Array:\n", array_2d)
print("Spaltenweise sortiertes Array:\n", sorted_array_2d)
Ausgabe:
Originales 2D-Array:
[[3 7 2]
[9 1 5]
[6 8 4]]
Spaltenweise sortiertes Array:
[[2 3 7]
[1 5 9]
[4 6 8]]
In diesem Beispiel wird das Array spaltenweise sortiert. Jede Zeile des Arrays wird unabhängig voneinander sortiert.
Durch Angabe von axis=0
kann das Array entlang der Zeilen sortiert werden.
# Sortierung entlang der Zeilenachse (axis=0)
sorted_array_2d_axis0 = np.sort(array_2d, axis=0)
# Visualisierung der zeilenweise sortierten Arrays
print("Zeilenweise sortiertes Array:\n", sorted_array_2d_axis0)
Ausgabe:
Zeilenweise sortiertes Array:
[[3 1 2]
[6 7 4]
[9 8 5]]
In diesem Beispiel werden die Werte entlang der Spalten sortiert, indem die Sortierung auf die Zeilen angewendet wird (Achse 0).
numpy.argsort
Die Funktion numpy.argsort
gibt die Indizes zurück, die das Array sortieren würden. Dies ist besonders nützlich, wenn die Reihenfolge der sortierten Werte benötigt wird, ohne die eigentlichen Werte zu verändern.
# Indizes der sortierten Elemente des Arrays abrufen
sorted_indices = np.argsort(array)
# Visualisierung der Ergebnisse
print("Originales Array:", array)
print("Indizes der sortierten Elemente:", sorted_indices)
Ausgabe:
Originales Array: [5 3 8 1 9 2]
Indizes der sortierten Elemente: [3 5 1 0 2 4]
Hier gibt argsort
die Indizes des Arrays zurück, die verwendet werden könnten, um das Array zu sortieren.
argsort
bei einem zweidimensionalen Array# Indizes der sortierten Elemente eines 2D-Arrays entlang der letzten Achse abrufen
sorted_indices_2d = np.argsort(array_2d, axis=1)
# Visualisierung der Ergebnisse
print("Originales 2D-Array:\n", array_2d)
print("Indizes der sortierten Elemente (spaltenweise):\n", sorted_indices_2d)
Ausgabe:
Originales 2D-Array:
[[3 7 2]
[9 1 5]
[6 8 4]]
Indizes der sortierten Elemente (spaltenweise):
[[2 0 1]
[1 2 0]
[2 0 1]]
Die argsort
-Funktion gibt die Indizes der sortierten Elemente für jedes Element in einem zweidimensionalen Array zurück.
Manchmal ist es notwendig, nur nach bestimmten Werten oder Kriterien zu sortieren. Numpy ermöglicht das Sortieren entlang von Teildaten wie beispielsweise nach bestimmten Spalten.
# Sortierung des 2D-Arrays nach der zweiten Spalte
sorted_by_column = array_2d[array_2d[:, 1].argsort()]
# Visualisierung des sortierten Arrays
print("Array nach der zweiten Spalte sortiert:\n", sorted_by_column)
Ausgabe:
Array nach der zweiten Spalte sortiert:
[[9 1 5]
[3 7 2]
[6 8 4]]
In diesem Beispiel wird das 2D-Array nach der zweiten Spalte sortiert. Dies ist besonders nützlich, wenn Daten tabellarisch vorliegen und nach einer bestimmten Spalte sortiert werden müssen.
order
(für Strukturiertes Array)Wenn strukturierte Arrays verwendet werden, kann auch eine Sortierung nach mehreren Kriterien oder Feldern durchgeführt werden.
# Ein strukturiertes Array erstellen
structured_array = np.array([(1, 'Apfel', 5.5), (3, 'Banane', 2.1), (2, 'Orange', 9.0)],
dtype=[('ID', 'i4'), ('Frucht', 'U10'), ('Preis', 'f4')])
# Sortierung nach ID und Preis
sorted_structured_array = np.sort(structured_array, order=['ID', 'Preis'])
# Visualisierung des sortierten Arrays
print("Nach ID und Preis sortiertes Array:\n", sorted_structured_array)
Ausgabe:
Nach ID und Preis sortiertes Array:
[(1, 'Apfel', 5.5) (2, 'Orange', 9. ) (3, 'Banane', 2.1)]
Hier wird ein strukturiertes Array erstellt und nach den Feldern ID
und Preis
sortiert.