Capítulo 7 de 22 11 secciones 7 min

Compartir

Las matrices con nombre propio, y por qué les pusieron uno

Cuadrada, diagonal, simétrica, identidad y ortogonal. Qué tienen de especial y dónde te las vas a encontrar trabajando.

Una matriz cuadrada tiene el mismo número de filas que de columnas. La diagonal tiene ceros fuera de la diagonal principal, la simétrica es igual a su traspuesta, y la ortogonal es la que cumple que su traspuesta es su inversa. No son curiosidades de examen: cada una aparece en un sitio concreto y saber cuál tienes delante te ahorra cuentas.

Los nombres no son para el examen 🌸

En el colegio te hacen memorizar diez tipos de matriz y nunca te dicen para qué. Y la verdad es que sí sirven, pero no como lista: sirven porque cuando reconoces una, te ahorras trabajo. Hay operaciones que en una matriz cualquiera son carísimas y en una diagonal son una división.

Así que vamos con los cinco que te vas a encontrar trabajando, y con dónde aparece cada uno en lo que ya hicimos en este libro.

Volvemos a abrir el archivo

Las mismas líneas de siempre, las del capítulo 1.

import pandas as pd
import numpy as np

df = pd.read_csv('ventas-miss-yera.csv')
for c in ('unidades', 'monto', 'satisfaccion'):
    df[c] = pd.to_numeric(df[c], errors='coerce')

X = df[['unidades', 'monto', 'satisfaccion']].dropna().to_numpy()
print('X.shape:', X.shape)
X.shape: (2238, 3)

Matriz cuadrada: la que tiene el mismo número de filas que de columnas

Tus datos casi nunca son cuadrados. X tiene 2.238 filas y 3 columnas, y así va a ser siempre: muchas más filas que columnas.

Pero mira lo que pasa cuando la multiplicas por su traspuesta, que es la operación del capítulo 6:

G = X.T @ X
print('X.shape:', X.shape)
print('G.shape:', G.shape, '| cuadrada:', G.shape[0] == G.shape[1])
X.shape: (2238, 3)
G.shape: (3, 3) | cuadrada: True

Y ahí está la primera razón por la que esto importa: casi todo lo interesante del álgebra lineal solo existe para matrices cuadradas. La inversa, el determinante, los autovalores. Nada de eso se le puede pedir a una tabla de 2.238 por 3.

Por eso el truco de multiplicar por la traspuesta aparece en todos lados: es la forma de pasar de una tabla enorme a una matriz chiquita y cuadrada sobre la que sí puedes trabajar 🧮

Matriz simétrica: la que es igual a su traspuesta

Una matriz es simétrica cuando A y A.T son la misma cosa. Dicho de otra forma: lo que está arriba de la diagonal es el espejo de lo que está abajo.

print('G ='); print(np.round(G, 2))
print('simetrica:', np.allclose(G, G.T))
simetrica: True

Esa G que acabamos de armar sale simétrica siempre, y no es casualidad: la casilla de la fila unidades con la columna monto se calcula exactamente igual que la de monto con unidades. Es la misma cuenta escrita al revés.

Y por eso la matriz de correlaciones también es simétrica: que unidades correlacione con monto es lo mismo que monto correlacione con unidades. Cuando veas una matriz simétrica, casi siempre está midiendo una relación entre pares que no tiene dirección.

Matriz diagonal: ceros en todos lados menos en la diagonal

Una matriz diagonal tiene números en la diagonal principal y cero en todo lo demás:

D = np.diag([2., 5., 3.])
print('D ='); print(D)
D =
[[2. 0. 0.]
 [0. 5. 0.]
 [0. 0. 3.]]

Y esto es lo que la hace útil: multiplicar por una diagonal es escalar cada fila por su propio número, nada más. Ni sumas ni mezclas.

print(np.round(D @ X[:2].T, 2))
[[  20.     20.  ]
 [2401.85 2624.5 ]
 [  12.      9.  ]]

Las unidades se duplicaron, el monto se multiplicó por 5 y la satisfacción por 3. Cada fila por lo suyo.

Cuando alguien normaliza columnas, o pondera variables, o escala datos antes de un modelo, por debajo casi siempre hay una diagonal. Y su inversa es la cosa más barata del mundo: uno partido cada número de la diagonal.

La matriz identidad del capítulo anterior es una diagonal con puros unos, y la matriz nula es la que tiene cero en todas partes. Las dos son casos de esta.

Matriz triangular: media matriz en cero

Triangular superior es la que tiene ceros debajo de la diagonal, y triangular inferior al revés:

M = np.arange(1., 10.).reshape(3, 3)
print('superior ='); print(np.triu(M))
print('inferior ='); print(np.tril(M))
superior =
[[1. 2. 3.]
 [0. 5. 6.]
 [0. 0. 9.]]
inferior =
[[1. 0. 0.]
 [4. 5. 0.]
 [7. 8. 9.]]

No la vas a construir tú a mano casi nunca, pero te la vas a encontrar: es lo que devuelven por dentro los métodos que resuelven sistemas de ecuaciones. Con una triangular se despeja de arriba hacia abajo sin invertir nada, y por eso solve es más rápido que inv 🐣

Matriz ortogonal: la que gira sin deformar

Esta es la más bonita de las cinco. Una matriz es ortogonal cuando su traspuesta es su inversa:

Q = np.array([[0., -1.],
              [1.,  0.]])

print('Q.T @ Q ='); print(Q.T @ Q)
print('la traspuesta hace de inversa:', np.allclose(Q.T, np.linalg.inv(Q)))
Q.T @ Q =
[[1. 0.]
 [0. 1.]]
la traspuesta hace de inversa: True

Multiplicar por una ortogonal es girar: cambia la orientación pero no estira ni encoge nada. Las distancias entre tus puntos quedan exactamente iguales antes y después.

Y por eso importa, aunque suene abstracto: cuando en el capítulo 12 rotemos los datos para mirarlos desde otro ángulo, la matriz que hace ese giro es ortogonal. Es lo que garantiza que PCA reordene la información sin inventarse ni perder nada por el camino.

Bonus práctico: invertir una ortogonal no cuesta nada, porque invertirla es trasponerla. Reconocer una te ahorra la operación más cara del capítulo anterior.

Comprueba que se entendió

Comprueba que lo tienes

Tienes X con forma (2238, 3) y calculas G = X.T @ X. ¿Qué puedes afirmar de G sin mirar un solo número?

  • Que es cuadrada de 3 por 3 y además simétrica
  • Que es cuadrada de 2238 por 2238
  • Que tiene inversa seguro, porque es cuadrada
  • Que es diagonal, porque las columnas son distintas

Ejercicios

1. La correlación también es simétrica

Comprueba que la matriz de correlaciones sale simétrica, y mira qué tiene en la diagonal.

C = np.corrcoef(X.T)
print('simetrica:', np.allclose(C, C.T))
print('diagonal :', np.round(np.diag(C), 4))
simetrica: True
diagonal : [1. 1. 1.]

Simétrica porque que unidades correlacione con monto es lo mismo que monto correlacione con unidades. Y unos en la diagonal porque ahí cada columna se está correlacionando consigo misma, y eso siempre da 1.

2. Invertir una diagonal cuesta una división

Invierte una matriz diagonal a mano, sin usar inv, y comprueba que da lo mismo.

D = np.diag([2., 5., 4.])

a_mano = np.diag(1 / np.diag(D))
print('a mano:'); print(a_mano)
print('iguales:', np.allclose(a_mano, np.linalg.inv(D)))
a mano:
[[0.5  0.   0.  ]
 [0.   0.2  0.  ]
 [0.   0.   0.25]]
iguales: True

Uno partido cada número de la diagonal y ya está. Por eso reconocer una diagonal ahorra tanto: la operación más cara del capítulo anterior aquí es una división por cada fila.

Lo que te llevas

  • 🔲 Cuadrada: mismas filas que columnas. Sin esto no hay inversa, ni determinante, ni autovalores.
  • 🪞 Simétrica: igual a su traspuesta. Aparece siempre que mides relaciones entre pares, como la correlación o X traspuesta por X.
  • Diagonal: ceros fuera de la diagonal. Multiplicar por ella es escalar cada fila, y su inversa es trivial.
  • 📐 Triangular: media matriz en cero. Es lo que usan por dentro los solucionadores de sistemas.
  • 🔄 Ortogonal: su traspuesta es su inversa. Gira sin deformar, y es la que hace el trabajo en PCA.

Y si de todo el capítulo te llevas una sola frase, que sea esta:

Reconocer el tipo de matriz que tienes delante no es trivia de examen: es saber qué operación te va a salir barata.

Qué viene ahora

Ya sabemos cuándo una matriz tiene inversa y cuándo no, y ahora también cómo se llama cada forma. Falta medir: cuánto mide un vector, cuánto se parecen dos. Eso es el capítulo 8 📏

Practica este capítulo 📓

Todo el código de arriba en un cuaderno que corre de principio a fin, y los ejercicios con una celda vacía para que los hagas tú. Se abre en Google Colab de un clic y no hay que instalar nada. Donde veas %%revisa, escribe tu respuesta y el cuaderno te dice si te salió.

¿Prefieres trabajar en tu máquina? Bájate el cuaderno de práctica o el de soluciones. Todos están también en github.com/soymissyera/MissYeraEjercicios.

¿Le sirve a alguien que conoces?

Pásale el libro. Es gratis, está entero y no pide registro 🐣

Instagram y TikTok no dejan compartir enlaces desde la web: esos dos copian la URL para que la pegues en tu historia.

¿Tienes alguna duda o consulta?