numpy: el poder de las operaciones con arreglos
Al finalizar este tema
Podrás explicar qué es ndarray de numpy, sus ventajas frente a las listas y realizar operaciones básicas.
¿Qué es numpy?
numpy (NumPy) es una biblioteca para procesar rápidamente grandes cantidades de datos numéricos en Python.
import numpy as np
# Lista → ndarrayarr = np.array([1, 2, 3, 4, 5])print(arr) # [1 2 3 4 5]print(type(arr)) # <class 'numpy.ndarray'>np es el acrónimo estándar de NumPy.
¿Por qué usar NumPy en lugar de listas?
Diferencias de rendimiento
import numpy as np
# Multiplicar cada uno de los 1 millón de elementos por 2
# Lista de Python puropy_list = list(range(1_000_000))result = [x * 2 for x in py_list] # lento
# numpynp_arr = np.arange(1_000_000)result = np_arr * 2 # rápido (10-100 veces)NumPy está escrito internamente en C y almacena datos del mismo tipo en memoria contigua. Las listas de Python tienen elementos que son objetos Python independientes, mientras que ndarray tiene una memoria contigua, lo que resulta beneficioso para la caché de la CPU.
Operaciones vectoriales
import numpy as np
a = np.array([1, 2, 3])b = np.array([4, 5, 6])
# Operación elemento por elemento — sin buclesprint(a + b) # [5 7 9]print(a * b) # [4 10 18]print(a ** 2) # [1 4 9]print(a > 2) # [False False True]Para hacer esto en una lista, debes usar un bucle for. En NumPy, se puede hacer en una sola línea.
Creación de arreglos
import numpy as np
# Crear directamentea = np.array([1, 2, 3])
# Relleno con ceroszeros = np.zeros(5) # [0. 0. 0. 0. 0.]
# Relleno con unosones = np.ones(3) # [1. 1. 1.]
# Números consecutivosseq = np.arange(0, 10, 2) # [0 2 4 6 8]
# Espaciado uniformelin = np.linspace(0, 1, 5) # [0. 0.25 0.5 0.75 1. ]Arreglos multidimensionales
import numpy as np
# Arreglo bidimensional (matriz)matrix = np.array([ [1, 2, 3], [4, 5, 6]])print(matrix.shape) # (2, 3) — 2 filas, 3 columnasprint(matrix[0, 1]) # 2 — Fila 0, columna 1print(matrix[:, 0]) # [1 4] — Columna 0 de todas las filas
# También es posible con arreglos tridimensionalescube = np.zeros((2, 3, 4))print(cube.shape) # (2, 3, 4)shape devuelve las dimensiones del arreglo en forma de tupla. Es habitual consultar las dimensiones (shape) en análisis de datos, procesamiento de imágenes y aprendizaje automático.
Operaciones comunes
import numpy as np
arr = np.array([3, 1, 4, 1, 5, 9, 2, 6])
print(arr.sum()) # 31print(arr.mean()) # 3.875print(arr.std()) # 2.588...print(arr.min()) # 1print(arr.max()) # 9print(arr.argmax()) # 5 (índice del valor máximo)
# Ordenamientoprint(np.sort(arr)) # [1 1 2 3 4 5 6 9]
# Filtro por condiciónprint(arr[arr > 3]) # [4 5 9 6]
# reshape — Cambio de formareshaped = arr.reshape(2, 4)print(reshaped)# [[3 1 4 1]# [5 9 2 6]]Broadcasting
Es posible realizar operaciones entre arrays de diferentes dimensiones.
import numpy as np
matrix = np.array([ [1, 2, 3], [4, 5, 6]])
# Sumar [10, 20, 30] a cada filarow = np.array([10, 20, 30])print(matrix + row)# [[11 22 33]# [14 25 36]]NumPy expande automáticamente row a dos filas para realizar la operación. Esto se conoce como difusión (broadcasting). No es necesario escribir bucles explícitos.