HOWTO · Python
IndexError: Ungültiger Index für eine skalare Variable beheben
Diagnostizieren und beheben Sie NumPys IndexError bei einem erneuten Indexzugriff auf einen Skalar.
Auf dieser Seite
IndexError: invalid index to scalar variable bedeutet, dass ein Indexzugriff bereits einen einzelnen Skalar geliefert hat und der nächste Zugriff [...] diesen Skalar erneut indizieren will. Prüfen Sie bei NumPy ndim, shape und den ausgewählten Wert.
Array und ausgewählten Wert prüfen
Ein eindimensionales NumPy-Array benötigt eine Position. values[0] ist ein NumPy-Skalar und kein Ein-Element-Array; deshalb schlägt values[0][1] fehl. Der Typ des Zwischenergebnisses zeigt die Ursache.
import numpy as np
values = np.array([1, 2, 3, 4, 5])
selected = values[0]
print(values.ndim, values.shape)
print(type(selected).__name__)
print(values[3])
Output:
1 (5,)
int64
4
Die genaue skalare Klasse hängt von Datentyp und NumPy-Build ab. Entscheidend ist: selected besitzt keine Array-Dimension mehr.
Fehler reproduzieren und ein eindimensionales Array korrigieren
Dieses Grenzbeispiel fängt die Diagnose ab. Der erste Index wählt 1; der zweite Index ist daher ungültig. Entfernen Sie ihn für einen Wert oder verwenden Sie einen Slice für ein Array.
import numpy as np
values = np.array([1, 2, 3, 4, 5])
try:
print(values[0][1])
except IndexError as error:
print(error)
print(values[0])
print(values[0:2])
Output:
invalid index to scalar variable.
1
[1 2]
values[0] liefert einen Skalar, values[0:2] dagegen ein eindimensionales Array. Entscheiden Sie zuerst, welche Form der Code wirklich benötigt.
Ein zweidimensionales NumPy-Array indizieren
Ein zweidimensionales Array hat Zeile und Spalte. Die Tupelschreibweise grid[row, column] macht den beabsichtigten Zugriff klar.
import numpy as np
grid = np.array([[1, 2, 3], [4, 5, 6]])
print(grid.ndim, grid.shape)
print(grid[1, 2])
print(grid[1][2])
Output:
2 (2, 3)
6
6
Beide Formen liefern 6; grid[1, 2] beschreibt den Zugriff direkter. Ein dritter Index versucht, den Skalar erneut zu indizieren.
Skalaren Indexzugriff von einem Bereichsfehler unterscheiden
values[9] fragt nach einem nicht vorhandenen Element und meldet einen Bereichsfehler. values[0][1] erreicht zuerst ein gültiges Element und behandelt es dann fälschlich als Container.
Geben Sie beim Debuggen array.ndim und array.shape aus und teilen Sie lange Ausdrücke in Zwischenschritte. Das deckt auch Fälle auf, in denen eine Zeile, Spalte oder Aggregation statt eines zweidimensionalen Ergebnisses entsteht.
Die Regeln erläutern die NumPy-Indizierungsdokumentation und die Referenz zu NumPy-Skalaren. Bei Python-Listen können andere Fehlermeldungen auftreten.