Qué es NumPy en Python: arrays y ejemplos prácticos

NumPy es la biblioteca fundamental para cálculo numérico en Python. Su estructura principal, ndarray, representa arreglos multidimensionales homogéneos y permite operar sobre miles o millones de valores sin escribir bucles elemento por elemento.
Pandas, scikit-learn y muchas herramientas científicas se apoyan en NumPy. Entender arrays, dimensiones, tipos y vectorización facilita todo el ecosistema de datos.
Para qué sirve NumPy
NumPy permite:
- crear vectores, matrices y tensores;
- ejecutar operaciones matemáticas vectorizadas;
- transformar dimensiones;
- hacer álgebra lineal;
- generar números aleatorios;
- calcular estadísticos;
- trabajar con datos de forma eficiente en memoria;
- intercambiar arrays con otras librerías.
No sustituye a pandas. NumPy se centra en arreglos numéricos; pandas añade etiquetas, índices, tipos mixtos y operaciones tabulares.
Instalar e importar NumPy
python -m pip install numpy
import numpy as np
El alias np es una convención ampliamente utilizada.
Crear un array
import numpy as np
ventas = np.array([120, 135, 128, 160, 172])
print(ventas)
print(ventas.shape) # (5,)
print(ventas.ndim) # 1
print(ventas.dtype) # tipo numérico
Matriz de dos dimensiones:
matriz = np.array([
[10, 20, 30],
[40, 50, 60],
])
print(matriz.shape) # (2, 3)
shape indica el tamaño por eje; ndim, el número de dimensiones; size, el total de elementos.
Arrays vs listas de Python
lista = [1, 2, 3]
array = np.array([1, 2, 3])
print(lista * 2) # repite la lista
print(array * 2) # multiplica cada valor
Un array suele almacenar un único tipo de dato en un bloque compacto. Eso facilita operaciones rápidas implementadas en código optimizado.
| Característica | Lista | ndarray |
|---|---|---|
| Tipos mezclados | Sí | Normalmente homogéneo |
| Operaciones vectorizadas | No nativas | Sí |
| Uso principal | Colección general | Cálculo numérico |
| Dimensiones | Anidación | Ejes explícitos |
Crear secuencias y matrices
np.zeros((3, 4))
np.ones((2, 2))
np.full((2, 3), 7)
np.arange(0, 10, 2)
np.linspace(0, 1, 5)
np.eye(3)
arange usa paso; linspace crea una cantidad fija de puntos incluyendo extremos por defecto.
Indexación y slicing
datos = np.array([10, 20, 30, 40, 50])
print(datos[0]) # primer elemento
print(datos[-1]) # último
print(datos[1:4]) # del índice 1 al 3
print(datos[::2]) # uno de cada dos
En matrices:
matriz[0, 1] # fila 0, columna 1
matriz[:, 1] # toda la segunda columna
matriz[1, :] # toda la segunda fila
Muchos slices son vistas, no copias independientes. Modificar la vista puede cambiar el array original:
parte = datos[1:3].copy()
Usa .copy() cuando necesites aislamiento.
Vectorización
precios = np.array([100, 200, 300])
con_iva = precios * 1.16
La operación se aplica a todo el array. También puedes combinar:
ingresos = np.array([1000, 1500, 1300])
costos = np.array([700, 900, 850])
margen = ingresos - costos
Evitar bucles Python suele mejorar claridad y rendimiento.
Broadcasting
Broadcasting permite operar arrays de formas compatibles:
ventas = np.array([
[100, 120, 130],
[80, 90, 110],
])
factores = np.array([1.00, 1.05, 1.10])
ajustadas = ventas * factores
El vector de tres elementos se aplica a cada fila. Compara las dimensiones desde la derecha: deben ser iguales o una de ellas debe valer 1.
Filtrar con máscaras
ventas = np.array([120, 80, 210, 95, 180])
altas = ventas[ventas >= 150]
print(altas)
Varias condiciones:
seleccion = ventas[(ventas >= 100) & (ventas < 200)]
Usa &, | y ~ con paréntesis; and y or no operan elemento a elemento.
Estadísticos y ejes
matriz = np.array([
[10, 20, 30],
[40, 50, 60],
])
matriz.mean()
matriz.sum(axis=0) # suma por columna
matriz.sum(axis=1) # suma por fila
matriz.std(ddof=1)
matriz.min()
matriz.max()
El parámetro axis es esencial: elimina el eje sobre el que agregas.
Cambiar forma
datos = np.arange(12)
matriz = datos.reshape(3, 4)
plano = matriz.ravel()
transpuesta = matriz.T
El número total de elementos debe conservarse al usar reshape.
Unir y dividir arrays
Para unir por filas o columnas:
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
por_filas = np.concatenate([a, b], axis=0)
por_columnas = np.concatenate([a, b], axis=1)
También existen vstack, hstack y column_stack, pero concatenate obliga a pensar con claridad en el eje. Para dividir:
izquierda, derecha = np.hsplit(por_columnas, 2)
Comprueba siempre shape antes de combinar. Un error de dimensiones suele ser más fácil de resolver al escribir las formas esperadas.
Álgebra lineal
NumPy incluye operaciones matriciales:
A = np.array([[2.0, 1.0], [1.0, 3.0]])
b = np.array([8.0, 13.0])
solucion = np.linalg.solve(A, b)
producto = A @ solucion
Usa @ para multiplicación matricial; * multiplica elemento a elemento. Evita calcular una inversa explícita para resolver sistemas si solve expresa directamente el problema y suele ser más estable.
Valores faltantes
En arrays de punto flotante, np.nan representa un valor ausente:
datos = np.array([10.0, np.nan, 30.0])
print(np.isnan(datos))
print(np.nanmean(datos))
No compares con == np.nan; usa np.isnan. Para datos tabulares heterogéneos y faltantes complejos, pandas suele ser más cómodo.
Aleatoriedad reproducible
rng = np.random.default_rng(42)
muestra = rng.normal(loc=0, scale=1, size=1000)
enteros = rng.integers(0, 10, size=20)
default_rng es la interfaz moderna. Una semilla fija hace reproducibles pruebas y ejemplos; no la confundas con seguridad criptográfica.
Errores comunes
- Mezclar tipos y terminar con
dtype=object. - Confundir vista y copia.
- Usar bucles donde existe vectorización.
- Ignorar
axis. - Crear arrays gigantes intermedios por broadcasting.
- Comparar floats por igualdad exacta; usa
np.isclose. - Usar
anden máscaras. - Olvidar
ddof=1cuando calculas una desviación estándar muestral.
Preguntas frecuentes
¿Qué es un ndarray?
Es el array multidimensional de NumPy: una colección homogénea con forma, tipo y ejes definidos.
¿Por qué NumPy es más rápido que una lista?
Almacena datos de forma compacta y ejecuta muchas operaciones en código optimizado sin iterar desde Python.
¿Cuál es la diferencia entre NumPy y pandas?
NumPy trabaja con arrays; pandas ofrece Series y DataFrames con etiquetas y herramientas para datos tabulares.
¿Qué significa axis=0?
Agrega a lo largo de las filas y produce un resultado por columna en una matriz bidimensional.
¿Qué es broadcasting?
Es el conjunto de reglas que permite operar arrays de formas compatibles sin copiar manualmente los valores.
¿NumPy sirve para machine learning?
Sí. Es la base de muchas librerías y permite representar matrices de características, aunque scikit-learn añade modelos y evaluación.

Deja una respuesta