[PYTHON] Lassen Sie uns dies tun, indem wir numpy multiplizieren, ohne die for-Anweisung zu verwenden

Ich möchte die for-Anweisung nicht verwenden, weiß aber nicht, wie ich mit numpy rechnen soll

Die hier behandelte Berechnung ist, wenn Sie verschiedene Kombinationen kombinieren möchten. Ansonsten lesen Sie bitte andere Artikel.

\boldsymbol A = \left(a_0, \dots, a_I  \right) \\
\boldsymbol B = \left(b_0, \dots, b_J  \right) \\
\boldsymbol C = \left(c_0, \dots, c_K  \right) \\

Von

a_i b_j c_k

Wenn Sie berechnen möchten

A = np.arange(2)+1
B = np.arange(3)+1
C = np.arange(4)+1
print("A=", A)
print("B=", B)
print("C=", C)

D = A[:, np.newaxis, np.newaxis] * B[:, np.newaxis] * C
print("\nD=", D) 
print("\nD.shape=", D.shape) 
A= [1 2]
B= [1 2 3]
C= [1 2 3 4]

D= [[[ 1  2  3  4]
  [ 2  4  6  8]
  [ 3  6  9 12]]

 [[ 2  4  6  8]
  [ 4  8 12 16]
  [ 6 12 18 24]]]

D.shape= (2, 3, 4)

Wenn Sie nur $ b_j c_k $ haben, reicht numpy.outer aus.

print(np.outer(B,C))
print(B[:, np.newaxis] * C)
[[ 1  2  3  4]
 [ 2  4  6  8]
 [ 3  6  9 12]]
[[ 1  2  3  4]
 [ 2  4  6  8]
 [ 3  6  9 12]]

Ein etwas kompliziertes Beispiel

\boldsymbol A = \left(a_0, \dots, a_I  \right) \\
\boldsymbol B = \left(b_0, \dots, b_J  \right) \\
\boldsymbol C = \left(c_0, \dots, c_K  \right) \\
\\
\boldsymbol X = \left(x_0, \dots, x_L  \right) \\
\boldsymbol Y = \left(y_0, \dots, y_J  \right) \\
\boldsymbol Z = \left(z_0, \dots, z_K  \right) \\
\\
a_i x_l \sum_{j=0}^J b_j  y_j \sum_{k=0}^K c_k z_k \\

\newcommand{\argmax}{\mathop{\rm arg~max}\limits}
\newcommand{\argmin}{\mathop{\rm arg~min}\limits}

\argmax_{j}{a_i x_l b_j  y_j \sum_{k=0}^K c_k z_k} \\

Im Falle von

ABC = A[:, np.newaxis, np.newaxis] * B[:, np.newaxis] * C
XYZ = X[:, np.newaxis, np.newaxis] * Y[:, np.newaxis] * Z
print("\nABC=", ABC)
print("\nXYZ=", XYZ)

O = ABC[:, np.newaxis] * XYZ
P = np.sum(O, axis=(2,3))
Q = np.argmax(np.sum(O, axis=3), axis=2)
print("O=", O)
print("P=", P)
print("Q=", Q)

Ich denke ich sollte es tun.

Recommended Posts

Lassen Sie uns dies tun, indem wir numpy multiplizieren, ohne die for-Anweisung zu verwenden
Lassen Sie es uns tun, indem Sie numpy teilen, ohne die for-Anweisung zu verwenden
So führen Sie den Befehl sed mit der for-Anweisung mehrmals aus
Suchen Sie mit Pythonista3 nach einem Bild von der Kamerarolle
Lassen Sie uns die Karte mit der Grundkarte anzeigen
[Python] Neunundneunzig Tabellen, die for-Anweisungen verwenden
Zum ersten Mal in Numpy werde ich es von Zeit zu Zeit aktualisieren
Ich dachte, es wäre langsam, die for-Anweisung in NumPy zu verwenden, aber das war nicht der Fall.