[PYTHON] Multiplizieren eines dreidimensionalen Arrays mit Numpy's einsum

Ein Bekannter fragte mich, wie man ein dreidimensionales Array einfach multiplizieren könne, und als ich es nachschlug, gab es in der Numpy-Bibliothek ein Einsum, das Einsteins Abkürzungen verwendete, und ich dachte, es wäre einfacher, dies zu tun. ..

Erstellen Sie zunächst zwei 1x2x5 3D-Matrizen und eine 2x3x5 3D-Matrix.

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]
...

Wenn Sie dies mit numpy erstellen,

A = np.array([[[0,1,1,0,0],
               [0,1,0,0,1]]])

W = np.arange(30).reshape(2,3,5)

Sie können es mit tun.

Die Form der Matrix von A (1, 2, 5) wird durch Einsteins Reduktionssymbol (i, j, k) dargestellt. In ähnlicher Weise wird die Form der W-Matrix (2, 3, 5) durch (j, l, k) dargestellt.

Das Multiplizieren dieser beiden Matrizen sollte zu einer Matrix von (1,3,5) führen, daher lautet die Formel mit einsum wie folgt.

R = np.einsum("ijk,jlk -> ilk",A,W)

print(R)
print(R.shape)

Bei der Ausführung wird R so.

[[[ 0 17  2  0 19]
  [ 0 27  7  0 24]
  [ 0 37 12  0 29]]]

(1,3,5)

Das Ergebnis ist eine 1x3x5 3D-Matrix.

Referenz (Englisch):

Recommended Posts

Multiplizieren eines dreidimensionalen Arrays mit Numpy's einsum
Erstellen Sie sofort ein Diagramm mit 2D-Daten mit der matplotlib von Python
Verwenden Sie Python auf Raspberry Pi 3, um "Temperatur (mit A / D-Wandler)" zu erkennen!