驴C贸mo convertir una lista en un array de NumPy?

Rate this post

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鈥檚 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 S脥, considera la posibilidad de convertirte en un desarrollador freelance de Python. It鈥檚 the best way of approaching the task of improving your Python skills鈥攅ven if you are a complete beginner.

Join my free webinar 鈥淗ow to Build Your High-Income Skill Python鈥 and watch how I grew my coding business online and how you can, too鈥攆rom the comfort of your own home.

Join the free webinar now!