¿Cómo convertir una lista en un array de NumPy?

Para convertir una lista de Python en un array de NumPy, usa cualquiera de los siguientes dos métodos:

  1. La función np.array() que toma un iterable y devuelve un array de NumPy creando una nueva estructura de datos en memoria.
  2. La función np.asarray() que toma un iterable como argumento y lo convierte al array. La diferencia con np.array() es que np.asarray() no crea una nueva copia en memoria si pasas un array de NumPy. Todos los cambios realizados en el array original se reflejan en el array de NumPy.

Ejercicio: Crear array b a partir de array a utilizando ambos métodos. Luego cambia un valor en el array a. ¿Qué pasa en el array b?

NumPy vs Listas de Python

El tipo de datos de lista integrado en Python es muy potente. Sin embargo, el array de NumPy tiene muchas ventajas sobre las listas de Python. ¿Cuáles son éstas?

Ventajas de NumPyVentajas de Listas de Python
Rebanado multidimensionalIndependiente de bibliotecas
Funcionalidad de difusiónIntuitivo
Velocidad de ProcesamientoMenos complicado
Huella de memoriaDatos de lista heterogéneos permitidos
Muchos métodos de convenienciaForma de datos arbitraria (matriz no cuadrada)

Para saber más sobre las ventajas de los arrays de NumPy respecto a las listas de Python, lee el tutorial detallado de mi blog.

¿Cómo convertir una lista de Python 1D en un array de NumPy?

Problema: dada una lista de Python unidimensional. ¿Cómo convertir una lista en un array de NumPy?

Ejemplo: Tienes la siguiente lista 1D de enteros de Python.

lst = [0, 1, 100, 42, 13, 7]

Quieres convertirla en un array de NumPy.

array([  0,   1, 100,  42,  13,   7])

Método 1: np.array(…)

La forma más simple de convertir una lista de Python en un array de NumPy es usar la función np.array() que toma un iterable y devuelve un array de NumPy.

import numpy as np
lst = [0, 1, 100, 42, 13, 7]
print(np.array(lst))

El resultado es:

# [  0   1 100  42  13   7]

Esto crea una nueva estructura de datos en memoria. Los cambios en la lista original no son visibles para la variable que contiene el array de NumPy:

lst = [0, 1, 100, 42, 13, 7]
a = np.array(lst)
lst.append(999)
print(a)
# [  0   1 100  42  13   7]

El elemento 999 que ahora es parte de la lista lst no forma parte del array a.

Método 2: np.asarray(…)

Una alternativa es usar la función np.asarray() que toma un argumento -el iterable– y lo convierte al array de NumPy.

La diferencia con np.array() es que np.asarray() no crea una nueva copia en memoria si pasas un array de NumPy. Todos los cambios realizados en el array original se reflejan en el array de NumPy. Así que mucho ojo.

lst = [0, 1, 100, 42, 13, 7]
a = np.array(lst)
b = np.asarray(a)
a[0] = 99
print(b)
# [ 99   1 100  42  13   7]

El array b se crea con la función np.asarray(), por lo que si cambias un valor del array a, el cambio se reflejará en la variable b (porque apuntan al mismo objeto en memoria).

Convertir lista de listas en un array 2D

Problema: dada una lista de listas en Python. ¿Cómo convertirla en un array 2D de NumPy?

Ejemplo: Convierte la siguiente lista de listas

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

en un array de NumPy

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

Solución: Utiliza la función np.array(list) para convertir una lista de listas en un array de NumPy bidimensional.

Este es el código:

# Import the NumPy library
import numpy as np

# Create the list of lists
lst = [[1, 2, 3], [4, 5, 6]]

# Convert it to a NumPy array
a = np.array(lst)

# Print the resulting array
print(a)
'''
[[1 2 3]
[4 5 6]]
'''

Sugerencia: El método de NumPy np.array() toma un iterable como entrada y lo convierte en un array de NumPy.

Convertir una lista de listas con diferente número de elementos

Problema: dada una lista de listas en Python. Las listas internas tienen un número variable de elementos. ¿Cómo convertirlas en un array de NumPy?

Ejemplo: Digamos que tienes la siguiente lista de listas:

[[1, 2, 3], [4, 5], [6, 7, 8]]

¿Cuáles son los diferentes enfoques para convertir esta lista de listas en un array de NumPy?

Solución: Hay tres estrategias diferentes que puedes usar. (fuente)

(1) Utiliza la función estándar np.array().

# Import the NumPy library
import numpy as np

# Create the list of lists
lst = [[1, 2, 3], [4, 5], [6, 7, 8]]

# Convert it to a NumPy array
a = np.array(lst)

# Print the resulting array
print(a)
'''
[list([1, 2, 3]) list([4, 5]) list([6, 7, 8])]
'''

Esto crea un array de NumPy con tres elementos: cada elemento es del tipo lista. Puedes comprobar el tipo del resultado utilizando la función integrada type():

>>> type(a)
<class 'numpy.ndarray'>

(2) Hacer un array de arrays.

# Import the NumPy library
import numpy as np

# Create the list of lists
lst = [[1, 2, 3], [4, 5], [6, 7, 8]]

# Convert it to a NumPy array
a = np.array([np.array(x) for x in lst])

# Print the resulting array
print(a)
'''
[array([1, 2, 3]) array([4, 5]) array([6, 7, 8])]
'''

Esto es más lógico que la versión anterior porque crea un array NumPy de arrays NumPy 1D (en lugar de listas de Python 1D).

(3) Hacer que las listas sean iguales en longitud.

# Import the NumPy library
import numpy as np

# Create the list of lists
lst = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]

# Calculate length of maximal list
n = len(max(lst, key=len))

# Make the lists equal in length
lst_2 = [x + [None]*(n-len(x)) for x in lst]
print(lst_2)
# [[1, 2, 3, None], [4, 5, None, None], [6, 7, 8, 9]]

# Convert it to a NumPy array
a = np.array(lst_2)

# Print the resulting array
print(a)
'''
[[1 2 3 None]
[4 5 None None]
[6 7 8 9]]
'''

Utiliza comprensión de listas para “rellenar” con valores None cada lista interna con una longitud menor que la máxima.

Artículos Relacionados

A dónde ir desde aquí

Suficiente teoría. ¡Vamos a practicar un poco!

Los programadores cobran seis cifras y más porque pueden resolver problemas de forma más eficaz utilizando la inteligencia de las máquinas y la automatización. Para tener más éxito como programador, resuelve más problemas reales para personas reales. Así es como se pulen las habilidades que realmente necesitas en la práctica. After all, what’s the use of learning theory that nobody ever needs?

¡Desarrollarás destrezas de programación de alto valor al trabajar en proyectos prácticos de programación!

¿Quieres dejar de aprender con proyectos de juguete y centrarte en proyectos prácticos de código que te hagan ganar dinero y resuelvan problemas reales para la gente?

Si tu respuesta es , considera la posibilidad de convertirte en un desarrollador freelance de Python. It’s the best way of approaching the task of improving your Python skills—even if you are a complete beginner.

Join my free webinar “How to Build Your High-Income Skill Python” and watch how I grew my coding business online and how you can, too—from the comfort of your own home.

Join the free webinar now!