HOWTO · Python

Corregir IndexError: índice no válido para una variable escalar

Diagnostique IndexError de NumPy cuando un valor escalar se indexa de nuevo.

En esta página

IndexError: invalid index to scalar variable indica que una indexación ya devolvió un escalar y el siguiente [...] intenta indexar ese escalar otra vez. En NumPy, examine ndim, shape y el valor seleccionado antes de añadir otro índice.

Inspeccionar la matriz y el valor seleccionado

Una matriz NumPy unidimensional necesita una posición. values[0] es un escalar NumPy, no una matriz de un elemento; por eso values[0][1] falla. Comprobar el tipo intermedio muestra el problema.

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

La clase escalar concreta puede variar; selected ya no tiene dimensiones que indexar.

Reproducir el error y corregir una matriz unidimensional

El primer subíndice selecciona 1; el segundo es inválido. Quite el índice adicional para obtener un valor o use un corte para conservar una matriz.

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] devuelve un escalar, mientras que values[0:2] devuelve una matriz unidimensional.

Indexar una matriz NumPy bidimensional

Una matriz bidimensional tiene fila y columna; grid[row, column] expresa directamente esa intención.

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

Ambas formas devuelven 6; un tercer índice intenta indexar ese escalar.

Distinguir un escalar de un índice fuera de límites

values[9] solicita un elemento ausente. values[0][1] llega a un elemento válido y después lo trata erróneamente como contenedor.

Imprima array.ndim y array.shape, y separe expresiones largas en variables intermedias. Consulte la documentación de indexación de NumPy y la referencia de escalares.