Multiplier un tableau tridimensionnel à l'aide de la somme de Numpy

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):

Recommended Posts

Multiplier un tableau tridimensionnel à l'aide de la somme de Numpy
Créez instantanément un diagramme de données 2D à l'aide de matplotlib de python
Utilisez python sur Raspberry Pi 3 pour détecter la "température (en utilisant un convertisseur A / N)"!