Programación con Python para Datos · Programación

Arrays de NumPy y broadcasting

Crear arrays de NumPy, vectorizar operaciones y aplicar el broadcasting correctamente para operar con matrices de distinto tamaño.

Arrays de NumPy y broadcasting

Ilustracion de Python para datos: DataFrame, graficas y arrays de NumPy.
Python para ciencia de datos: NumPy, pandas y manipulacion de datos.

Mapa conceptual

El cimiento de todo Casi toda la ciencia de datos en Python se apoya en NumPy. Pandas, scikit-learn y los tensores de aprendizaje automático son, por debajo, arrays. Aprender a pensar en operaciones sobre arrays enteros, y no en bucles elemento a elemento, cambia tu forma de programar.

¿Qué es un array?

Un array de NumPy es una cuadrícula de valores del mismo tipo, indexada por posiciones. A diferencia de una lista de Python, guarda los datos de forma contigua en memoria, lo que permite operaciones vectorizadas mucho más rápidas. Puede tener una, dos o más dimensiones.

Vectorización

Vectorizar es aplicar una operación a todos los elementos a la vez, sin escribir el bucle. Cuando sumas dos arrays con a + b, NumPy recorre los elementos internamente en código compilado. El resultado es el mismo que un bucle, pero órdenes de magnitud más rápido y mucho más legible.

Crear arrays

  1. np.array([1, 2, 3]) desde una lista; np.array([[1,2],[3,4]]) para una matriz.
  2. np.zeros(5), np.ones((2,3)), np.arange(0, 10, 2) generan estructuras al instante.
  3. np.linspace(0, 1, 11) reparte un rango en un número fijo de puntos, ideal para mallas.

dtype y forma

Inspeccionar estos atributos es el primer paso antes de operar.
AtributoQué informaEjemplo para una matriz 2x3
shapedimensiones(2, 3)
ndimnúmero de ejes2
sizetotal de elementos6
dtypetipo homogéneofloat64

¿Qué ventaja principal ofrece vectorizar con NumPy frente a un bucle Python elemento a elemento?

Broadcasting: la idea

El broadcasting es la regla que permite operar arrays de formas distintas sin copiar datos. NumPy «extiende» virtualmente el array más pequeño alineando sus ejes con el mayor, de derecha a izquierda, para que las formas sean compatibles. No duplica memoria: repite el valor sobre la marcha.

Reglas de compatibilidad

Ejemplo de broadcasting

Una matriz de forma (3, 4) y un vector de forma (4,) son compatibles: el vector se aplica a cada una de las tres filas. Una columna de forma (3, 1) se propaga a las cuatro columnas. Entender esto evita escribir bucles anidados para restar una media por columna, por ejemplo.

Broadcasting en la práctica

Estandarizar una matriz restando la media de cada columna y dividiendo por su desviación se resuelve en dos líneas gracias al broadcasting: las estadísticas por columna tienen la forma adecuada para propagarse sobre las filas. Es la operación detrás de innumerables preprocesamientos.

Errores frecuentes

El broadcasting copia físicamente el array pequeño tantas veces como sea necesario para igualar formas.

Cuándo NO usar arrays

Si tus filas tienen longitudes distintas o estructuras heterogéneas, un array rectangular no es la herramienta: ahí suelen encajar mejor una lista de objetos o un DataFrame de Pandas. El array brilla cuando los datos son una tabla numérica regular.

Clasifica cada operación:

Vectorizacion
Broadcasting
Creacion

NumPy Docs
Reglas de broadcasting explicadas con diagramas.

Tienes una matriz de temperaturas de forma (7, 24) (una semana por horas) y quieres restar la media de cada hora. Explica con tus palabras qué forma debe tener el vector de medias para que el broadcasting funcione y por qué.

Documentacion pandas
Guia de referencia para manipulacion de datos en Python.