Operaciones con matrices: la matriz como máquina
Una matriz no es una tabla de números. Es una máquina que toma vectores y los transforma en otros vectores. Acá vas a ver esa máquina trabajando — y vas a poder cambiar sus engranajes con cuatro sliders.
Idea central: una matriz 2x2 de la forma [[a,b],[c,d]] toma cualquier punto del plano (x, y) y lo manda al punto (a·x + b·y, c·x + d·y). Eso es todo lo que hace. Y con esa única operación las matrices controlan rotaciones, escalas, sesgos y reflexiones — los bloques con los que se construyen las redes neuronales.
1 Una matriz no es una tabla. Es una máquina.
La forma más común de presentar una matriz es como una tabla:
Pero esa imagen es engañosa: pareciera que es solo "números ordenados". En realidad la matriz describe una transformación: una regla para mover puntos del plano. Cuando le das un vector de entrada (x, y), escupe un vector de salida transformado.
Esa transformación es lineal, lo que significa dos cosas prácticas: las líneas rectas siguen siendo líneas rectas, y el origen (0,0) no se mueve. Todo lo demás — estirar, rotar, sesgar, reflejar — está permitido.
2 Operaciones simples: suma y escala
Antes de la operación estrella (multiplicación por un vector), repasamos las dos operaciones triviales:
Suma de matrices
Sumás elemento a elemento. Las dos matrices tienen que ser del mismo tamaño:
Pensalo así: si A hace una transformación y B hace otra, entonces A + B hace ambas al mismo tiempo, sumando el efecto de cada una.
Multiplicación por un escalar
Multiplicás cada elemento por el mismo número. Es como decírle a la transformación "hacé tu trabajo, pero con esta intensidad":
Si A rota 30 grados, 2A rota 30 grados y además estira el resultado al doble.
3 La operación estrella: matriz por vector
Acá pasa lo interesante. Una matriz 2x2 multiplicada por un vector columna (x, y) produce un nuevo vector. La regla:
Cada fila de la matriz "construye" una coordenada del resultado. La primera fila (a, b) mezcla x e y para fabricar la nueva x. La segunda fila (c, d) hace lo mismo para fabricar la nueva y.
Como cada punto se transforma con esta regla, una figura entera también se transforma. Si tomás una letra "F" y aplicás la matriz a cada uno de sus vértices, la F sale rotada, estirada, sesgada, o lo que la matriz dicte.
4 Tu turno: mové los engranajes y mirá la F
Cuatro sliders: uno para cada elemento de la matriz 2x2. La F gris es la original (la identidad). La F naranja es lo que sale después de aplicar la matriz que estás controlando. Cambiá los valores y mirá en vivo cómo se deforma.
Sandbox interactivo
Mové los 4 sliders. La matriz que estás aplicando aparece a la derecha.
- Identidad: la matriz
[[1,0],[0,1]]no hace nada. La F naranja queda exactamente sobre la gris. - Estirar X o Estirar Y: la F se alarga en una dirección.
- Rotar 45°: la F gira sin cambiar tamaño (det = 1).
- Sesgar: la F se "inclina" como letras itálicas.
- Reflejar: la F sale espejada. Mirá el determinante: se vuelve negativo. Eso es Bayes para la orientación — se invirtió.
- Aplastar: la matriz
[[1,1],[1,1]]manda todo el plano a una línea. El determinante vale 0 y la transformación es irreversible — perdiste información.
5 Multiplicación de matrices = composición de transformaciones
La última operación es la más rica: multiplicar dos matrices entre sí. La regla aritmética es algo enrevesada al principio:
Pero hay una lectura visual mucho más clara: multiplicar dos matrices significa aplicar una transformación y después la otra. Si A rota 30 grados y B estira el plano al doble, entonces B·A primero rota y después estira.
Por eso A·B y B·A en general dan resultados distintos: el orden importa cuando combinás movimientos. Rotar y después estirar no es lo mismo que estirar y después rotar.
Una capa de red neuronal hace exactamente esto: toma un vector de entrada y lo multiplica por una matriz de pesos. Encadenar capas es encadenar transformaciones, igual que multiplicar matrices. Cuando una IA "aprende", lo que está haciendo es ajustar los a, b, c, d de millones de matrices para que la transformación total convierta una imagen de entrada en la respuesta correcta.
6 Variante 1: transpuesta, identidad y otras matrices fundamentales
Hay tres matrices especiales que aparecen una y otra vez en cualquier cálculo. Conocerlas evita confusiones.
Matriz identidad (I)
La que no hace nada: deja cualquier vector como estaba. Tiene unos en la diagonal y ceros en todo lo demás. Es el "1" de la multiplicación de matrices:
Matriz transpuesta (AT)
"Volcamos" la matriz alrededor de su diagonal. La fila 1 se vuelve columna 1, la fila 2 se vuelve columna 2, etc. Geométricamente, transponer una transformación es como hacerla "al revés" en cierto sentido.
Matriz cero, simétricas, triangulares
Otras matrices con nombre propio: la matriz cero (todo ceros, mata cualquier vector), las simétricas (A = AT, aparecen en covarianzas y geometría), y las triangulares (con ceros encima o debajo de la diagonal, útiles en descomposiciones).
Matriz identidad como punto de partida
Cuando un sistema de control de planta inicia, las "ganancias" entre variables (qué impacta a qué) se modelan como una matriz. Antes de calibrar nada, esa matriz parte de la identidad — "cada variable solo afecta a sí misma". Después, mediciones reales la van rellenando con las correlaciones reales del proceso.
Identidad = "antes de saber nada, asumimos que las cosas no se mezclan"Transpuesta para invertir flujos
Una matriz F de flujos de mineral de origen a destino (filas = orígenes, columnas = destinos) puede transponerse para mirar el mismo proceso desde el otro lado (filas = destinos, columnas = de qué origen vino cada uno). Es el mismo dato, dos formas de leerlo.
Matrices simétricas omnipresentes
La matriz de covarianza de variables operacionales (que viste en lección 1.2) es simétrica por construcción: la covarianza entre A y B es la misma que entre B y A. Esa propiedad permite usar técnicas como PCA y diagonalización (que vienen en la próxima lección).
7 Variante 2: determinante (factor de área) e inversa (deshacer la transformación)
Dos cantidades clave de cualquier matriz: el determinante (cuánto cambia el área) y la matriz inversa (la que deshace la transformación).
Determinante = factor de área
Cuando aplicás una matriz A a una figura, el área cambia por un factor igual al determinante de A:
- det > 1: la figura crece
- det = 1: la figura mantiene el área (rotaciones puras, reflejos puros)
- 0 < det < 1: la figura se achica
- det < 0: la figura se reflejó (orientación invertida)
- det = 0: la figura colapsó a una recta o un punto. Información perdida.
Matriz inversa = deshacer la transformación
Si A es una máquina que transforma vectores, A−1 es la máquina que deshace esa transformación:
La regla crítica: una matriz tiene inversa sí y solo sí det(A) ≠ 0. Si el determinante es cero, no hay forma de deshacer lo que la matriz hizo — perdiste información al aplicarla y no la podés recuperar.
Sistema de balance metalúrgico
Tu planta tiene 3 etapas de chancado en serie y querés saber cuánto material ingresó sabiendo cuánto salió al final, conociendo las eficiencias de cada etapa. Eso se plantea como un sistema lineal A · x = y donde A es la matriz de eficiencias, y los flujos de salida medidos y x el flujo de entrada desconocido.
Para encontrar x, calculás la inversa de A: x = A−1 · y. Si el det(A) ≠ 0, tenés una solución única. Si det(A) = 0, el sistema es inconsistente: dos o más etapas están "mezcladas" en el modelo y no podés separarlas con esas mediciones. Tendrí>as que instalar más sensores.
Mezcla de minerales (blending)
Querés mezclar minerales de 3 stocks para conseguir un concentrado con leyes objetivo. Los stocks tienen leyes conocidas de Cu, Au y S. El problema es: ¿qué fracción de cada stock necesito? Es de nuevo A · x = y, donde A contiene las leyes de cada stock, y son las leyes objetivo, y x son las fracciones que buscás.
Cuidado: det cerca de cero (mal condicionado)
Si det(A) es muy cercano a cero (pero no exactamente cero), la inversa existe pero es muy sensible al ruido. Un pequeño error de medición en y produce un error gigante en x. En la práctica, antes de invertir una matriz, siempre mirá su número de condición.
8 Variante 3: matrices ortogonales (rotaciones puras y cambios de eje)
Una clase muy especial de matrices son las ortogonales: aquellas que rotan o reflejan figuras sin deformarlas. Mantienen distancias, ángulos y áreas. Cumplen una propiedad mágica:
O sea, su inversa es simplemente su transpuesta. Esto es enorme: calcular la inversa de una matriz ortogonal cuesta cero esfuerzo computacional. Por eso las rotaciones se usan tanto en gráficos por computadora, geología, robotica y aprendizaje profundo.
Ejemplos cotidianos: una rotación de 30 grados, un reflejo respecto del eje X, una combinación de rotación y reflejo. Todas son matrices ortogonales.
Cambio de ejes para alinearse con la veta
Las vetas mineralizadas rara vez son horizontales. Pueden tener una inclinación (manteo) de 45 grados o más. Para estudiarlas, los geólogos rotan los ejes del modelo geológico para que uno de los ejes quede paralelo a la veta. Esa rotación se hace con una matriz ortogonal.
Después del cambio de ejes, las leyes más altas quedan alineadas con un eje, lo que simplifica análisis posteriores (variogramas, kriging, planes de explotación).
Matriz ortogonal = cambio de coordenadas sin distorsiónEsfuerzos principales en geomecánica
El tensor de esfuerzos en una roca se representa con una matriz simétrica 3×3. Diagonalizarlo (lección 6) involucra encontrar la matriz ortogonal de rotació>n que alinea los ejes con las direcciones principales del esfuerzo — máximo, intermedio, mínimo. Esas direcciones determinan dónde la roca se fractura primero.
Geomecánica + matrices ortogonales = cálculo de estabilidad de excavacionesSistemas de navegación de equipos mineros
Las palas, camiones y perforadoras autónomas usan rotaciones (matrices ortogonales) para traducir entre los marcos de referencia: GPS global, marco de la mina, marco del vehículo, marco del sensor. Cada cambio de marco es una multiplicación por una matriz ortogonal.
+ Más parientes del concepto
El mundo de las matrices tiene muchas otras estructuras útiles:
Producto de Hadamard (elemento a elemento)Ver▾
No es la multiplicación clásica de matrices, sino multiplicar elemento por elemento (como una multiplicación entre vectores extendida a matrices). Usado en redes neuronales modernas como mecanismo de "attention" y en pesos por importancia.
Matrices dispersas (sparse)Ver▾
Matrices donde la mayoría de los elementos son cero. En mucha aplicaciones (grafos, sistemas grandes de ecuaciones, redes de calidad), las matrices son enormes pero esparcidas. Hay representaciones especiales (CSR, COO) y algoritmos específicos para no gastar memoria en los ceros.
Descomposición LU (factorización)Ver▾
Cualquier matriz cuadrada puede escribirse como producto de una triangular inferior L por una triangular superior U. Es el truco que usan las computadoras para resolver sistemas lineales eficientemente sin calcular inversas directamente. La base numérica de scipy, MATLAB y casi todos los solvers.
Número de condiciónVer▾
Mide qué tan "sensible" es un sistema lineal a pequeñas perturbaciones. Una matriz bien condicionada da resultados estables; una mal condicionada amplifica el ruido brutalmente. Antes de invertir o resolver un sistema con datos ruidosos, siempre verificá el número de condición con numpy.linalg.cond.
Ver el código en Python: cinco snippets, de matriz manual a sistema de balance Click para abrir
Empezamos con matriz por vector pura y escalamos hasta resolver un sistema real con número de condición.
1. Matriz por vector sin librerías:
# Multiplicar [[a, b], [c, d]] * (x, y) a mano A = [[2, 1], [0, 3]] v = [4, 5] # Cada fila de A multiplica al vector v elemento a elemento y se suma nuevo_x = A[0][0] * v[0] + A[0][1] * v[1] nuevo_y = A[1][0] * v[0] + A[1][1] * v[1] print(f"Vector original: ({v[0]}, {v[1]})") print(f"Vector transformado: ({nuevo_x}, {nuevo_y})")
2. Operaciones básicas con numpy:
import numpy as np A = np.array([[2, 1], [0, 3]]) v = np.array([4, 5]) # Matriz por vector (el operador @ es la multiplicacion matricial) resultado = A @ v print("A @ v =", resultado) # Suma y multiplicacion por escalar B = np.array([[1, 0], [2, 1]]) print("A + B =") print(A + B) print("3 * A =") print(3 * A) # Transpuesta print("A transpuesta =") print(A.T)
3. Determinante, inversa e identidad:
import numpy as np A = np.array([[2.0, 1.0], [0.0, 3.0]]) # Determinante det_A = np.linalg.det(A) print("det(A) =", round(det_A, 3)) # = 6, el area se multiplica por 6 # Inversa A_inv = np.linalg.inv(A) print("A inversa =") print(A_inv.round(3)) # Verificar: A @ A_inv debe ser aproximadamente la identidad producto = A @ A_inv print("A @ A_inv =") print(producto.round(3)) # Identidad 2x2 I = np.eye(2) print("Identidad =") print(I)
4. Matriz ortogonal (rotación):
import numpy as np # Matriz de rotacion 30 grados theta = np.radians(30) R = np.array([ [np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)] ]) print("Matriz R =") print(R.round(3)) # Propiedad magica: R transpuesta = R inversa print("R.T @ R =") print((R.T @ R).round(3)) # Debe ser identidad # Determinante de R = 1 (rotacion no cambia area) print("det(R) =", round(np.linalg.det(R), 3)) # Aplicar R a varios vectores en lote (rotar todos a la vez) vectores = np.array([[1, 0], [0, 1], [2, 3]]) rotados = vectores @ R.T # Cada fila se rota print("Vectores originales:"); print(vectores) print("Vectores rotados:"); print(rotados.round(3))
5. Resolver un sistema (balance metalúrgico simplificado):
import numpy as np # Tres stocks con leyes diferentes de Cu, Au, S # Queremos mezcla con: 1.0% Cu, 2.5 g/t Au, 6% S # Matriz A: columnas = stocks, filas = elementos A = np.array([ [0.5, 1.5, 0.8], # leyes de Cu (%) [1.0, 4.0, 2.5], # leyes de Au (g/t) [3.0, 10.0, 5.0] # leyes de S (%) ]) # Objetivo b = np.array([1.0, 2.5, 6.0]) # Verificar que el sistema sea bien condicionado antes de invertir cond = np.linalg.cond(A) print(f"Numero de condicion: {cond:.2f}") if cond > 1000: print("ADVERTENCIA: matriz mal condicionada, soluciones inestables") # Resolver: x son las fracciones de cada stock x = np.linalg.solve(A, b) print("Fracciones de cada stock:") for i, f in enumerate(x): print(f" Stock {i+1}: {f*100:.1f}%") print(f"Suma: {x.sum()*100:.1f}% (deberia ser 100%)")
9 Pregunta de chequeo
Si aplicás la matriz [[2, 0], [0, 1]] al cuadrado unidad (con vértices en (0,0), (1,0), (1,1), (0,1)), ¿qué figura sale?
Acabas de ver que casi cualquier transformación deforma todo el plano. Pero hay direcciones especiales que la matriz no rota — solo estira o encoge. Esas direcciones se llaman vectores propios, y el factor con el que se estiran son los valores propios. Es la clave de PCA, de las redes profundas y de muchos algoritmos de IA. Eso viene en la próxima lección.
Regístrate al boletín MathPlay
De la idea al laboratorio que funciona: datos, simulación, visualización, IA y tecnología aplicada. Te escribo cuando hay algo nuevo que vale la pena compartir.
Sin calendario fijo. Sin spam.
Listo. Te escribo cuando haya algo nuevo.
