Simplify pytorch einsum

Viewed 51

Consider the following pytorch snippet:

X = torch.einsum("rij, sij -> rs", A, A)
Y = torch.einsum("rij, sij -> rs", B, B)
Z = torch.einsum("rij, sij -> rs", C, C)
torch.einsum("ij, ij, ij -> ", X, Y, Z)

which performs the following summation

Is it possible to formulate this in a more succinct (that is more vectorised/optimal) way? (e.g. using the fact that X, Y, Z are symmetric matrices)

1 Answers

You can make it more succinct but I don’t see much room for actual performance optimisation:

X = torch.einsum("rij, sij", A, A)
Y = torch.einsum("rij, sij", B, B)
Z = torch.einsum("rij, sij", C, C)
torch.einsum("ij, ij, ij", X, Y, Z)
Related