4.3 Computación científica: matrices con NumPy y gráficos con Matplotlib

1

La estructura ndarray y vectorización de operaciones

NumPy es la biblioteca nuclear de computación numérica en Python. Introduce el array multidimensional homogéneo ndarray:

$$\text{import numpy as np} \quad \longrightarrow \quad \text{a = np.array([1.0, 2.0, 3.0])}$$
Ejemplo:

Las operaciones aritméticas se aplican elemento a elemento sin necesidad de bucles for explícitos:

$$\text{b = a * 2.5 + 1.0} \longrightarrow \text{Evaluación vectorizada simultánea en todo el bloque de datos.}$$
2

Generación de mallas numéricas con linspace y arange

Para simular magnitudes continuas (tiempo, espacio, potencial) se generan vectores espaciados uniformemente:

$$\text{x = np.linspace(inicio, fin, num_puntos)} \quad \text{o} \quad \text{t = np.arange(0.0, 10.0, 0.1)}$$
Ejemplo:

Definimos el eje temporal para una oscilación armónica amortiguada:

$$\text{t = np.linspace(0.0, 5.0, 500)} \quad \longrightarrow \quad \text{y = np.exp(-t) * np.cos(2 * np.pi * t)}$$
3

Indexación avanzada y máscaras booleanas

NumPy permite filtrar elementos mediante expresiones condicionales evaluadas directamente como arrays de booleanos:

$$\text{mascara = arr > 0.0} \quad \longrightarrow \quad \text{positivos = arr[mascara]}$$
Ejemplo:

Sustituimos lecturas espurias por un valor de fondo utilizando np.where:

$$\text{filtrado = np.where(arr < 0.0, 0.0, arr)}$$
4

Visualización científica 2D con Matplotlib

La biblioteca Matplotlib (módulo pyplot) es el estándar internacional para generar figuras y gráficas científicas:

$$\text{import matplotlib.pyplot as plt} \quad \longrightarrow \quad \text{plt.plot(x, y, label='Modelo')}$$
Ejemplo:

Configuración canónica de una figura con etiquetas físicas y guardado:

$$\text{plt.xlabel('Tiempo (s)'); plt.ylabel('Voltaje (V)'); plt.grid(True); plt.savefig('figura.png')}$$
Ejemplo 1: Cálculo de la norma euclídea con álgebra lineal de NumPy
$$\text{v = np.array([3.0, 4.0])}$$
$$\text{modulo = np.linalg.norm(v)} \longrightarrow 5.0$$
Ejemplo 2: Creación de matrices especiales de ceros y unos
$$\text{identidad = np.eye(3); ceros = np.zeros((3, 3))}$$
$$\text{print(identidad.shape)} \longrightarrow (3, 3)$$
Ejemplo 3: Producto matricial con el operador @
$$\text{A = np.array([[1, 2], [3, 4]]); B = np.array([[2, 0], [1, 2]])}$$
$$\text{C = A @ B} \longrightarrow [[4, 4], [10, 8]]$$
Ejemplo 4: Estadísticos descriptivos vectorizados
$$\text{datos = np.array([12.1, 14.5, 9.8, 11.2, 13.0])}$$
$$\text{media = np.mean(datos); desv = np.std(datos)}$$
Ejemplo 5: Ajuste polinómico de grado 1 (mínimos cuadrados)
$$\text{x = np.array([0, 1, 2, 3]); y = np.array([1.1, 2.9, 5.2, 6.8])}$$
$$\text{pendiente, intercepto = np.polyfit(x, y, 1)} \longrightarrow \text{Regresión lineal óptima calculada.}$$