Einsum
Einstein Summation in Numpy or Pytorch
Key Ideas
- Element-wise multiplication is done along identical indexes in the inputs, e.g.,
"a,a->a"
. - Summation is done along missing indexes in the output, e.g.,
"a->"
. (No output means scalar value) - Transpositions in the output are automatically handled.
Examples
- Vector inner product:
"a,a->"
- Vector element-wise product:
"a,a->a"
- Vector outer product:
"a,b->ab"
- 1-D summation:
"a->"
- 2-D summation:
"ab->"
- 3-D summation:
"abc->"
- Matrix transposition:
"ab->ba"
- Matrix diagonal:
"ii->i"
- Matrix trace:
"ii->"
- Matrix inner product:
"ab,ab->"
- Matrix multiplication:
"ab,bc->ac"
- Batch matrix multiplication:
"Nab,Nbc->Nac"
- Quadratic form / Mahalanobis Distance:
"a,ab,b->"
Documentation
- Pytorch: https://pytorch.org/docs/stable/generated/torch.einsum.html
- Numpy: https://numpy.org/doc/stable/reference/generated/numpy.einsum.html
Credits: https://obilaniu6266h16.wordpress.com/2016/02/04/einstein-summation-in-numpy/amp/