Erweiterte Indizierung
Einfaches Slicing funktioniert gut für zusammenhängende Bereiche, aber manchmal benötigen Sie komplexere Auswahlen. NumPy bietet zwei leistungsstarke fortgeschrittene Indexing-Techniken:
Integer-Array-Indexing
Wählen Sie beliebige Elemente aus, indem Sie ein Array von Indizes bereitstellen. Dies ist so, als würden Sie bestimmte Elemente aus einer Liste anhand ihrer Positionen auswählen.
Beispiel aus der Praxis: Sie haben Testergebnisse und möchten die Ergebnisse für Schüler an den Positionen 3, 7 und 12 überprüfen:
scores = np.array([85, 92, 78, 95, 88, 76, 91, 89, 84, 93, 87, 90, 82])
student_positions = [3, 7, 12] ## Schüler, an denen Sie interessiert sind
selected_scores = scores[student_positions] ## [95, 89, 82]
Boolesches Array-Indexing (Maskierung)
Wählen Sie Elemente basierend auf Bedingungen aus. Erstellen Sie eine "Maske" aus True/False-Werten und verwenden Sie diese dann, um das Array zu filtern.
Beispiel aus der Praxis: Filtern Sie bestandene Noten (≥ 80) aus einer Klasse:
scores = np.array([85, 92, 78, 95, 88, 76, 91, 89, 84, 93])
passing_mask = scores >= 80 ## [True, True, False, True, True, False, True, True, True, True]
passing_scores = scores[passing_mask] ## [85, 92, 95, 88, 91, 89, 84, 93]
Warum das wichtig ist
- Integer-Indexing: Perfekt für das Sampling spezifischer Datenpunkte
- Boolesches Indexing: Ideal für Datenfilterung und bedingte Auswahlen
- Beide erstellen Kopien (keine Views), daher wirken sich Änderungen nicht auf das ursprüngliche Array aus
Lassen Sie uns beides ausprobieren. Ersetzen Sie den Inhalt von indexing_practice.py durch den folgenden Code:
import numpy as np
## --- Integer Array Indexing ---
x = np.arange(10, 0, -1)
print("Array for integer indexing:", x)
## Wählen Sie Elemente an den Indizes 3, 3, 1 und 8 aus
selected_elements = x[np.array([3, 3, 1, 8])]
print("Selected elements with integer array:", selected_elements)
## --- Boolean Array Indexing ---
y = np.array([1., -1., -2., 3.])
print("\nArray for boolean indexing:", y)
## Erstellen Sie eine boolesche Maske für negative Elemente
mask = y < 0
print("Boolean mask (y < 0):", mask)
## Wählen Sie Elemente aus, bei denen die Bedingung True ist
negative_elements = y[mask]
print("Elements where y < 0:", negative_elements)
Speichern Sie die Datei und führen Sie das Skript aus:
python indexing_practice.py
Ihre Ausgabe sollte zeigen, wie sowohl Integer- als auch Boolesches Indexing funktionieren, um spezifische Daten aus Ihren Arrays auszuwählen.
Array for integer indexing: [10 9 8 7 6 5 4 3 2 1]
Selected elements with integer array: [7 7 9 2]
Array for boolean indexing: [ 1. -1. -2. 3.]
Boolean mask (y < 0): [False True True False]
Elements where y < 0: [-1. -2.]