Las operaciones del capítulo 2 en einsum
Tres operaciones que ya conoces, escritas con la única regla:
np.einsum('ii->', A) # traza == np.trace(A)
np.einsum('ij->ji', A) # transpuesta == A.T
np.einsum('ik,kj->ij', A, B) # producto matricial == A @ B
La traza repite una letra, lo que selecciona la diagonal, y luego la suma. La transpuesta conserva ambas letras pero invierte su orden tras la flecha: no se suma nada. El producto matricial comparte k entre dos entradas y lo descarta.