Búsqueda de sitios web

TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python


En Python, puedes usar la biblioteca numpy cuando trabajas con matrices y ciertos conceptos matemáticos como matrices y álgebra lineal.

Pero como cualquier otro aspecto del aprendizaje y trabajo con un lenguaje de programación, los errores son inevitables.

En este artículo, aprenderá cómo corregir el error "TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python" que ocurre principalmente cuando se usa la biblioteca numpy.

¿Qué causa el error TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python en Python?

El error "TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python" aparece cuando pasamos una matriz a un método que acepta solo un parámetro.

He aquí un ejemplo:

import numpy as np

y = np.array([1, 2, 3, 4])
x = np.int(y)

print(x)

# TypeError: only size-1 arrays can be converted to Python scalars

El código anterior arroja el error "TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python" porque pasamos la matriz y al método NumPy int(). El método solo puede aceptar un parámetro.

En la siguiente sección, verá algunas soluciones para este error.

Cómo solucionar el error TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python en Python

Hay dos soluciones generales para corregir el error "TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python".

Solución n.º 1: uso de la función np.vectorize()

La función np.vectorize() puede aceptar una secuencia/una matriz como parámetro. Cuando se imprime, devuelve una matriz.

He aquí un ejemplo:

import numpy as np

vector = np.vectorize(np.int_)
y = np.array([2, 4, 6, 8])
x = vector(y)

print(x)
# [2, 4, 6, 8]

En el ejemplo anterior, creamos una variable vector que "vectorizará" cualquier parámetro que se le pase: np.vectorize(np.int_).

Luego creamos una matriz y la almacenamos en la variable y: np.array([2, 4, 6, 8]).

Usando la variable vector que creamos inicialmente, pasamos la matriz y como parámetro: x=vector(y).

Cuando lo imprimimos, obtuvimos la matriz: [2, 4, 6, 8].

Solución #2 - Usar la función map()

La función map() acepta dos parámetros en este caso: el método NumPy y la matriz.

import numpy as np

y = np.array([2, 4, 6, 8])
x = np.array(list(map(np.int_, y)))

print(x)
# [2, 4, 6, 8]

En el ejemplo anterior, anidamos la función map() en un método list() para que la matriz se sintonice como una lista y no como un objeto de mapa.

Solución n.º 3: utilizar el método astype()

Podemos usar el método astype() para convertir una matriz NumPy en números enteros. Esto evitará que se genere el error "TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python".

Así es cómo:

import numpy as np

vector = np.vectorize(np.int_)
y = np.array([2, 4, 6, 8])
x = y.astype(int)

print(x)
# [2 4 6 8]

Resumen

En este artículo, hablamos sobre el error "TypeError: solo las matrices de tamaño 1 se pueden convertir a escalares de Python" en Python.

Se genera cuando pasamos una matriz como parámetro a un método numpy que acepta solo un parámetro.

Para corregir el error, utilizamos diferentes métodos como la función np.vectorize(), la función map() y el método astype().

¡Feliz codificación!

Artículos relacionados