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.