Une connaissance m'a demandé comment multiplier facilement un tableau en trois dimensions, et quand je l'ai recherché, il y avait un einsum dans la bibliothèque Numpy qui utilisait les abréviations d'Einstein, et j'ai pensé que ce serait plus facile de le faire. ..
Tout d'abord, créez deux matrices 3D 1x2x5 et une matrice 3D 2x3x5.
A =
\left(
\begin{matrix}
a_0 & a_1
\end{matrix}
\right)
, a_0 =
\left[
\begin{matrix}
0 & 1 & 1 & 0 & 0
\end{matrix}
\right]
, a_1 =
\left[
\begin{matrix}
0 & 1 & 0 & 0 & 1
\end{matrix}
\right]
W =
\left(
\begin{matrix}
w_0 & w_1 & w_2 \\
w_3 & w_4 & w_5
\end{matrix}
\right)
, w_0 =
\left[
\begin{matrix}
0 & 1 & 2 & 3 & 4
\end{matrix}
\right]
, w_1 =
\left[
\begin{matrix}
5 & 6 & 7 & 8 & 9
\end{matrix}
\right]
...
Si vous créez ceci en utilisant numpy,
A = np.array([[[0,1,1,0,0],
[0,1,0,0,1]]])
W = np.arange(30).reshape(2,3,5)
Vous pouvez le faire avec.
La forme de la matrice de A (1, 2, 5) est représentée par le symbole de réduction d'Einstein (i, j, k). De même, la forme de la matrice W (2, 3, 5) est représentée par (j, l, k).
La multiplication de ces deux matrices devrait aboutir à une matrice de (1,3,5), donc la formule utilisant einsum est la suivante.
R = np.einsum("ijk,jlk -> ilk",A,W)
print(R)
print(R.shape)
Lorsqu'il est exécuté, R devient comme ça.
[[[ 0 17 2 0 19]
[ 0 27 7 0 24]
[ 0 37 12 0 29]]]
(1,3,5)
Le résultat est une matrice 3D 1x3x5.
Référence (anglais):