Indizierung, Slicing und Fancy Indexing
Greifen Sie mit fortgeschrittenen Indizierungstechniken auf Array-Elemente zu und ändern Sie sie.
Indizierung, Slicing und Fancy Indexing ist eine kostenlose Python Academy-Lektion auf CoddyKit. Dies ist Lektion 3 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Python Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Grundlegende Indexierung
Greifen Sie mit ganzzahligen Indizes ab null auf Elemente zu. Negative Indizes zählen vom Ende. Bei mehrdimensionalen Arrays werden die Indizes durch Kommas getrennt.
import numpy as np
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr[0, 2]) # 3
print(arr[-1, -1]) # 9
print(arr[1]) # [4 5 6]Slicing
Die Slicing-Syntax start:stop:step gibt eine Sicht zurück. Sie wird unabhängig auf jede Dimension angewendet.
import numpy as np
m = np.arange(16).reshape(4,4)
print(m[1:3, 1:3])
# [[5 6]
# [9 10]]
print(m[::2, ::2]) # every other row and columnBoolesche Indexierung (Maskierung)
Übergeben Sie ein boolesches Array mit derselben Shape, um die Elemente auszuwählen, für die der Wert True ist.
import numpy as np
arr = np.array([1, -2, 3, -4, 5])
mask = arr > 0
print(mask) # [ True False True False True]
print(arr[mask]) # [1 3 5]
arr[~mask] = 0 # set negatives to 0
print(arr) # [1 0 3 0 5]Fancy-Indexierung mit Integer-Arrays
Übergeben Sie ein Array mit ganzzahligen Indizes, um mehrere bestimmte Elemente auszuwählen.
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
idx = np.array([0, 2, 4])
print(arr[idx]) # [10 30 50]
# 2-D fancy indexing:
m = np.arange(9).reshape(3,3)
print(m[[0,2], [0,2]]) # [m[0,0], m[2,2]] = [0, 8]np.where für die Indexauswahl
np.where(condition) (mit einem Argument) gibt die Indizes zurück, an denen die Bedingung True ist.
import numpy as np
arr = np.array([5, 2, 8, 1, 9])
idx = np.where(arr > 4)[0]
print(idx) # [0 2 4]
print(arr[idx]) # [5 8 9]np.take und np.put
np.take(arr, indices) wählt Elemente aus (unterstützt flache Indexierung). np.put(arr, indices, values) fügt Werte ein.
import numpy as np
arr = np.array([10, 20, 30, 40])
print(np.take(arr, [1, 3])) # [20 40]
np.put(arr, [0, 2], [99, 88])
print(arr) # [99 20 88 40]np.nonzero
np.nonzero(arr) gibt ein Tupel von Arrays zurück – eines pro Dimension – mit den Indizes der Elemente ungleich null.
import numpy as np
arr = np.array([[0,1,0],[2,0,3]])
rows, cols = np.nonzero(arr)
print(rows, cols) # [0 1 1] [1 0 2]Ellipsis-Indexierung
... (Ellipsis) wird auf so viele : erweitert, wie erforderlich sind, um die verbleibenden Dimensionen abzudecken.
import numpy as np
arr = np.ones((2,3,4,5))
print(arr[0, ..., 2].shape) # (3, 4) — first dim=0, last dim=2
print(arr[..., 0].shape) # (2, 3, 4) — last dim=0np.ix_ für äußere Indexierung
np.ix_ erstellt aus mehreren 1-D-Sequenzen ein offenes Gitter für eine Fancy-Indexierung nach Art eines äußeren Produkts.
import numpy as np
m = np.arange(25).reshape(5,5)
rows = [0, 2, 4]
cols = [1, 3]
print(m[np.ix_(rows, cols)])
# [[ 1 3]
# [11 13]
# [21 23]]Zuweisung zu einem Fancy-Index
Sie können einer Auswahl mit Fancy-Indexierung direkt Werte zuweisen.
import numpy as np
arr = np.zeros(5)
arr[[1, 3]] = [10, 20]
print(arr) # [ 0. 10. 0. 20. 0.]
# Broadcast a scalar:
arr[[0, 2, 4]] = 99
print(arr) # [99. 10. 99. 20. 99.]Unterschied: Sicht oder Kopie bei der Indexierung
Grundlegende Indexierung/Slicing → Sicht (Änderungen wirken sich auf das Original aus). Fancy-/boolesche Indexierung → Kopie (Änderungen wirken sich NICHT auf das Original aus).
import numpy as np
arr = np.arange(5)
view = arr[1:4] # view
view[0] = 99
print(arr) # [0 99 2 3 4]
copy = arr[[1,2,3]] # fancy → copy
copy[0] = 0
print(arr) # unchangedKurzer Test
Gibt boolesche/Fancy-Indexierung eine Sicht oder eine Kopie zurück?
Zusammenfassung
Verwenden Sie [row, col] für einzelne Elemente, start:stop:step für Slices (Sichten), boolesche Arrays für Maskierung (Kopien) und Integer-Arrays für Fancy-Indexierung (Kopien). Verwenden Sie np.where, um Indizes zu erhalten, und np.ix_ für äußere Gitter.
Häufig gestellte Fragen
Ist die Lektion „Indizierung, Slicing und Fancy Indexing“ kostenlos?
Ja — der vollständige Text von „Indizierung, Slicing und Fancy Indexing“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Python Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Python Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Indizierung, Slicing und Fancy Indexing“?
Greifen Sie mit fortgeschrittenen Indizierungstechniken auf Array-Elemente zu und ändern Sie sie. Du übst Python Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Python Academy zu starten?
Keine Vorkenntnisse erforderlich. Python Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 3 von 4.
Wie lange dauert die Lektion „Indizierung, Slicing und Fancy Indexing“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Python Academy-Lektion Code schreiben und ausführen?
Ja. Jede Python Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- NumPy-Arrays und dtypes
- Array-Operationen und Broadcasting
- Indizierung, Slicing und Fancy Indexing
- Lineare Algebra mit NumPy