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

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 Normalmente homogéneo
Operaciones vectorizadas No nativas
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 and en máscaras.
  • Olvidar ddof=1 cuando 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

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir