QuieroProgramar por Rodri Gonzalez
Data Analysis · Lección 13 de 19

NumPy Fundamentos

NumPy (Numerical Python) es la piedra angular de todo el ecosistema de Data Science en Python. Pandas, Matplotlib, Seaborn, scikit-learn — todos están construidos sobre NumPy. Cuando pandas calcula una media, por debajo está usando un array de NumPy. Entender NumPy te da el poder de escribir código numérico que es hasta 100x más rápido que los bucles de Python puro.

90–120 min Prerrequisitos: Lección 12 (EDA completo)
01

Concepto teórico

¿Por qué NumPy es tan rápido?

Una lista de Python es un contenedor genérico: cada elemento puede ser de cualquier tipo (int, string, lista…), y cada uno se almacena en una ubicación de memoria distinta. Un array de NumPy es un bloque contiguo de memoria donde todos los elementos son del mismo tipo. Esto permite:

  1. Operaciones vectorizadas: en vez de recorrer elemento por elemento con un bucle, NumPy aplica la operación a todo el array de golpe (internamente usa C compilado).
  2. Broadcasting: operaciones entre arrays de distinto tamaño se expanden automáticamente sin copiar datos.
  3. Memoria eficiente: un array de 1 millón de enteros ocupa ~4MB. Una lista de Python con los mismos números ocupa ~28MB.
Analogía: una lista de Python es como un estante donde cada libro está envuelto en una caja individual con etiqueta de tipo. Un array de NumPy es como una estantería de libros del mismo tamaño, perfectamente alineados, sin cajas — podés recorrerlos con la mano de un solo movimiento.

ndarray: el objeto central

Todo en NumPy gira alrededor del ndarray (N-dimensional array). Sus atributos clave:

Atributo Qué dice Ejemplo
.shape Dimensiones (3, 4) → 3 filas × 4 columnas
.ndim Número de dimensiones 2 → es una matriz 2D
.dtype Tipo de datos float64, int32
.size Total de elementos 12 (3 × 4)
.nbytes Memoria en bytes 96 (12 × 8 bytes)

Formas de crear arrays

Función Qué crea Ejemplo
np.array([1,2,3]) Desde una lista [1, 2, 3]
np.zeros((3,4)) Matriz de ceros 3×4 de 0.0
np.ones((2,3)) Matriz de unos 2×3 de 1.0
np.arange(0, 10, 2) Secuencia con paso [0, 2, 4, 6, 8]
np.linspace(0, 1, 5) N puntos equidistantes [0, .25, .5, .75, 1]
np.random.normal(0,1,100) Distribución normal 100 valores con μ=0, σ=1
np.eye(3) Matriz identidad 3×3 con 1s en la diagonal
Diferencia mortal con listas: las operaciones aritméticas funcionan distinto. [1,2,3] * 3 en Python da [1,2,3,1,2,3,1,2,3] (repetición). np.array([1,2,3]) * 3 da [3, 6, 9] (multiplicación elemento a elemento). Esto es fundamental y fuente de bugs cuando mezclas listas y arrays.
En el trabajo real: aunque trabajes principalmente con pandas, NumPy aparece constantemente: cuando usás np.where(), np.random para simulaciones, np.log() para transformaciones, o cuando un modelo de scikit-learn te devuelve un array de predicciones. Entender NumPy te hace más eficiente con todas estas herramientas.
02

Ejemplos explicados paso a paso

Ejemplo 1: Crear arrays y explorar sus atributos

Conocer la forma, tipo y tamaño de un array es como el .shape y .dtypes del EDA pero a nivel atómico.

ejemplo_01_crear.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 2: Operaciones vectorizadas — Adiós a los bucles

La gran ventaja de NumPy: aplicar operaciones matemáticas a millones de elementos sin escribir for loops.

ejemplo_02_vectorizadas.pyPython

        
Hacé clic en ▶ Ejecutar

Ejemplo 3: Indexación y slicing

NumPy extiende el slicing de Python con indexación avanzada: booleana, fancy indexing y slicing multidimensional.

ejemplo_03_indexacion.pyPython

        
Hacé clic en ▶ Ejecutar
Tip profesional — slicing 2D: la sintaxis m[filas, columnas] es la clave. m[:, 0] = todas las filas, columna 0. m[1:3, :] = filas 1 y 2, todas las columnas. Practicá esta notación hasta que sea natural — la vas a usar constantemente.

Ejemplo 4: Estadísticas y agregaciones

NumPy tiene funciones estadísticas optimizadas que son las mismas que pandas usa internamente. También podés agregar por eje (fila o columna).

ejemplo_04_estadisticas.pyPython

        
Hacé clic en ▶ Ejecutar
axis=0 vs axis=1: esta es la confusión más común de NumPy/pandas. axis=0 opera a lo largo de las filas (el resultado tiene una columna). axis=1 opera a lo largo de las columnas (el resultado tiene una fila). Pensalo así: axis=0 "colapsa" las filas → resultado por columna. axis=1 "colapsa" las columnas → resultado por fila.

Ejemplo 5: Reshape y broadcasting

Reshape cambia la forma de un array sin copiar datos. Broadcasting permite operar arrays de distinto tamaño automáticamente.

ejemplo_05_reshape_broadcast.pyPython

        
Hacé clic en ▶ Ejecutar
03

Referencia rápida

Operación Función Ejemplo
Crear array np.array() np.array([1,2,3])
Ceros / Unos np.zeros() / ones() np.zeros((3,4))
Secuencia np.arange() / linspace() np.arange(0,10,2)
Random np.random.normal() np.random.normal(0,1,100)
Forma .shape / .reshape() a.reshape(3,4)
Suma / Media .sum() / .mean() a.mean(axis=0)
Min / Max .min() / .max() a.max(axis=1)
Desv. std .std() a.std()
Filtro booleano a[a > 5] Elementos mayores a 5
IF vectorizado np.where(cond, si, no) np.where(a>0,"pos","neg")
Operaciones + - * / ** Elemento a elemento
04

Ejercicios

Nivel 1 · Básico

Ejercicio 1: Crear un array y explorar atributos

Creá un array 2D de forma (3, 4) con np.arange(12).reshape(3,4). Imprimí su shape. Debe incluir (3, 4).

ejercicio_01.pyDebe incluir "(3, 4)"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 2: Operaciones vectorizadas

Calculá el total de ventas (precios * cantidades) y la suma total. Debe incluir 2300.

ejercicio_02.pyDebe incluir "2300"

          
Hacé clic en ▶ Ejecutar
Nivel 1 · Básico

Ejercicio 3: Filtrado booleano

Filtrá los valores mayores a 50 del array. Imprimí cuántos son. Debe incluir 3.

ejercicio_03.pyDebe incluir "3"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 4: Estadísticas con axis

Dada una matriz 3×4 de ventas, calculá el promedio por fila (axis=1). Imprimí el promedio de la primera fila, debe incluir 25.0.

ejercicio_04.pyDebe incluir "25.0"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 5: np.where() — IF vectorizado

Usá np.where() para clasificar notas en "Aprobado" (≥60) o "Desaprobado". Debe incluir Aprobado.

ejercicio_05.pyDebe incluir "Aprobado"

          
Hacé clic en ▶ Ejecutar
Nivel 2 · Intermedio

Ejercicio 6: Broadcasting — aplicar IVA

Multiplicá un array de precios por 1.21 (IVA). Imprimí el primer precio con IVA. Debe incluir 121.0.

ejercicio_06.pyDebe incluir "121.0"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 7: Slicing 2D

De una matriz 4×5, extraé la submatriz de las filas 1 a 2 y columnas 2 a 4 con slicing. Imprimí su shape. Debe incluir (2, 3).

ejercicio_07.pyDebe incluir "(2, 3)"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 8: Generar datos aleatorios y estadísticas

Generá 1000 valores con distribución normal (μ=500, σ=100). Imprimí media, std y percentil 95. Debe incluir un valor cercano a 500.

ejercicio_08.pyDebe incluir algo cercano a "500"

          
Hacé clic en ▶ Ejecutar
Nivel 3 · Avanzado

Ejercicio 9: Reshape y operaciones por eje

Reshape un array de 12 elementos a (3,4). Calculá la suma por columna (axis=0). Imprimí el resultado. Debe incluir 15.

ejercicio_09.pyDebe incluir "15"

          
Hacé clic en ▶ Ejecutar
Nivel 4 · Desafío

Ejercicio 10: Simulación Montecarlo del IVA

Simulá 10,000 ventas con precios aleatorios (normal μ=500, σ=200, mínimo 50). Calculá IVA (21%), filtrá ventas >$800 y contá qué porcentaje del total representan. Debe incluir %.

ejercicio_10_desafio.pyDebe incluir "%"

          
Hacé clic en ▶ Ejecutar
05

Resumen y conexión

En la siguiente lección (14 · Intro a Machine Learning) vas a descubrir cómo las máquinas aprenden de los datos. NumPy es la base sobre la que se construyen todos los modelos — los datos siempre terminan como arrays numéricos.

Recursos: NumPy Quick Start · API Reference