Transformaciones Lineales: Algoritmo, Teoría y Ejemplos en Python
Una guía exhaustiva para desarrolladores, científicos de datos y entusiastas de la computación matemática.
1. Fundamentos de una Transformación Lineal
Una transformación lineal es una función f: V → W entre dos espacios vectoriales que preserva la suma y la multiplicación por escalar:
f(u + v) = f(u) + f(v)f(α·v) = α·f(v)
En coordenadas, cualquier transformación lineal se representa mediante una matriz A ∈ ℝ^{m×n} tal que f(x) = A·x.
2. Representación Matricial y Propiedades Clave
Propiedades esenciales
| Propiedad | Descripción |
|---|---|
| Linealidad | Preserva operaciones vectoriales. |
| Invertibilidad | Existe A⁻¹ ⇔ det(A) ≠ 0. |
| Rango | Dimensión del subespacio imagen. |
| Nullidad | Dimensión del núcleo (soluciones a A·x=0). |
Comparativa con transformaciones no lineales
| Característica | Lineal | No lineal |
|---|---|---|
| Superposición | Sí | No |
| Representación por matriz | Sí | No (requiere Jacobiano) |
| Complejidad computacional | O(m·n) | Variable, suele ser mayor |
| Facilidad de análisis | Alta (eigenvalores, SVD) | Baja |
3. Implementación Práctica en Python (NumPy)
NumPy es la biblioteca de referencia para operaciones matriciales en Python. A continuación, ejemplos clásicos.
3.1. Escalado (Scaling)
import numpy as np
# Vector original
v = np.array([2, 3])
# Matriz de escalado 2× en x, 0.5× en y
S = np.array([[2, 0],
[0, 0.5]])
v_scaled = S @ v
print(v_scaled) # → [4. , 1.5]
3.2. Rotación 2D
import numpy as np, math
def rotation_matrix(theta_deg):
theta = math.radians(theta_deg)
return np.array([[ math.cos(theta), -math.sin(theta)],
[ math.sin(theta), math.cos(theta)]])
v = np.array([1, 0])
R = rotation_matrix(45)
print(R @ v) # → [0.7071, 0.7071]
3.3. Shear (Cizallamiento)
import numpy as np
# Shear en X respecto a Y
shx = 1.2
Shear = np.array([[1, shx],
[0, 1]])
v = np.array([0, 2])
print(Shear @ v) # → [2.4, 2]
3.4. Proyección ortogonal sobre el eje X
import numpy as np
P = np.array([[1, 0],
[0, 0]])
v = np.array([3, 4])
print(P @ v) # → [3, 0]
3.5. Caso real: Reducción de dimensionalidad con SVD
import numpy as np
from numpy.linalg import svd
# Matriz de datos (10 muestras, 5 características)
X = np.random.rand(10, 5)
# Centering
X_centered = X - X.mean(axis=0)
U, s, VT = svd(X_centered, full_matrices=False)
# Mantener 2 componentes principales
k = 2
X_reduced = U[:, :k] * s[:k]
print('Shape reducido:', X_reduced.shape) # → (10, 2)
4. Optimización, Escalabilidad y Buenas Prácticas
- Uso de tipos de datos adecuados:
float32cuando la precisión defloat64no es necesaria reduce el consumo de memoria en un 50%. - Operaciones en‑lote: Aprovecha
np.einsumonp.dotcon matrices pre‑alocadas para evitar bucles de Python. - Paralelismo: NumPy delega a BLAS/LAPACK; asegúrate de instalar versiones multihilo (OpenBLAS, Intel MKL) para matrices > 500×500.
- Persistencia: Almacena matrices grandes en formato
.npzohdf5para carga incremental.
5. Depuración y Solución de Problemas Comunes
| Problema | Causa frecuente | Solución recomendada |
|---|---|---|
| Resultado inesperado (vector cero) | Matriz singular o mal ordenada | Verificar np.linalg.det(A); aplicar regularización (p.ej., A + λI). |
| Desbordamiento de precisión | Valores muy grandes (>1e308) en float64 | Escalar datos o usar np.float128 si está disponible. |
| Rendimiento bajo | Uso de bucles Python en lugar de operaciones vectorizadas | Reescribir con broadcasting o np.einsum. |
| Incompatibilidad de dimensiones | Multiplicación de matrices no conformes | Utilizar A.shape y B.shape para validar antes de @. |
6. Aplicaciones Reales de Transformaciones Lineales
- Visión por computadora: Transformaciones de coordenadas en pipelines de detección de objetos (rotación, escalado, homografía).
- Machine Learning: Componentes principales (PCA), regresión lineal, redes neuronales lineales.
- Robótica: Cinemática directa/inversa usando matrices de transformación homogénea (4×4).
- Gráficos por computadora: Modelado de escenas 3D mediante matrices de modelado, vista y proyección.
Algoritmo de Transformaciones Lineales: Conceptos, Ejemplos en Python y Mejores Prácticas