einsum is een functie in NumPy, Keras en PyTorch die je toelaat om tensoroperaties uit te voeren via de Einstein summation convention.
We gebruiken hier einops omdat het leesbaarder is en extra functies biedt om tensors te manipuleren.
Formule voor matrixvermenigvuldiging:
$C_{ij} = \sum_k A_{ik} B_{kj}$
Met Einstein conventie:
$C_{ij} = A_{ik} B_{kj}$
import numpy as np
import einops
A = np.arange(12).reshape(3,4) # 3x4 matrix
B = np.arange(-4,4).reshape(4,2) # 4x2 matrix
# Met einops.einsum
C = einops.einsum(A, B, "i k,k j->i j")
# Zelfde resultaat met loops
C = np.empty((3,2))
for i in range(3):
for j in range(2):
total = 0
for k in range(4):
total += A[i, k] * B[k, j]
C[i, j] = total