Resolver IndexError: las matrices utilizadas como índices deben ser de tipo entero(o booleano)

Olorunfemi Akinlua 21 junio 2023
Resolver IndexError: las matrices utilizadas como índices deben ser de tipo entero(o booleano)

Al trabajar con matrices Numpy en Python, es posible que experimente diferentes mensajes de error relacionados con problemas de índice o tipo. En estos muchos tipos de error, IndexError: las matrices utilizadas como índices deben ser de tipo entero (o booleano) puede ser complicado.

Cuando nos enfrentamos a mensajes de error IndexError, usamos el tipo incorrecto. En este caso, se suponía que debíamos usar Integer o Boolean, pero el índice de la matriz recibe otro tipo de datos (cadena o flotante).

En este artículo, explicaremos cómo lidiar con los mensajes de error IndexError: las matrices utilizadas como índices deben ser de tipo entero (o booleano) cuando se trabaja con números en Numpy.

Use astype() para resolver IndexError: las matrices utilizadas como índices deben ser de tipo entero (o booleano) en Numpy

Numpy solo funciona con dos tipos, Integer o Boolean. Por lo tanto, si hay un tipo que no entiende, arrojará un error.

Recreemos el mensaje de error para entender mejor este mensaje de error. Para recrear el mensaje de error, necesitamos generar dos matrices Numpy, “índice” y “matriz”, extraer valores de “índice” y usar los valores extraídos para acceder a los valores en “matriz”.

Para los valores extraídos, usaremos los valores de la primera columna.

import numpy as np

index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 2, 3], [4, 5, 6]])

indices = index[:, 0]
print(array[indices])

Producción :

Traceback (most recent call last):
  File "temp.py", line 7, in <module>
    print(array[indices])
IndexError: arrays used as indices must be of integer (or boolean) type

Del mensaje de error IndexError: las matrices utilizadas como índices deben ser de tipo entero (o booleano), sabemos que el problema proviene de la sección print(array[indices]).

Dado que sabemos que es sintácticamente correcto, sabemos que el problema que estamos buscando está presente en lo que estamos analizando en el enlace matriz. Eso nos lleva a la vinculación de índices.

Por lo que sabemos del mensaje de error, el elemento en el enlace índices podría no ser entero o Booleano. La propiedad dtype es útil para comprobar el tipo de elementos dentro de índices.

print(indices.dtype)

Producción :

float64

Ahora, eso confirma la causa del problema al que nos enfrentamos. Los valores que pasamos a los índices del enlace array son float64 en lugar de Boolean.

Para resolver esto, necesitamos convertir los valores en índices a Integer o Boolean. Tiene más sentido convertirlos a Integer.

Convertirlos a booleanos podría ser útil en otro momento.

El método astype() ayuda a modificar la propiedad dtype de una matriz Numpy. Para modificar el dtype del enlace indices, podemos usar lo siguiente.

indices = index[:, 0].astype(int)

Obtenemos lo siguiente si verificamos la propiedad dtype usando la expresión indices.dtype.

int32

Ahora, nuestro código se convierte en:

import numpy as np

index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 2, 3], [4, 5, 6]])

indices = index[:, 0].astype(int)
print(array[indices])

Producción :

[[1 2 3]
 [4 5 6]]

Podríamos haber convertido los valores de índices a booleanos. Experimentemos con eso.

Para hacerlo, tenemos una matriz Numpy con dos valores booleanos.

indices = index[:, 0].astype(bool)
print(indices)

Producción :

[False  True]

Los valores de la vinculación índices fueron [0. 1.], y al convertir 0 a booleano, da False, y cualquier otro número da True. Hagamos todo juntos.

import numpy as np

index = np.array([[0, 1, 2.1], [1, 2, 3.4]])
array = np.array([[1, 3, 5], [7, 9, 11]])

indices = index[:, 0].astype(bool)
print(array[indices])

Producción :

[[ 7  9 11]]

Eso es porque procesa solo el valor True.

Por lo tanto, cuando se enfrenta a un mensaje de error IndexError: las matrices utilizadas como índices deben ser de tipo entero (o booleano), sepa que hay un dtype incorrecto en alguna parte. Rastree su código y convierta los valores necesarios.

Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn

Artículo relacionado - Python Error