numpy.matmul
Die numpy.matmul
-Funktion führt ebenfalls eine Matrizenmultiplikation zwischen zwei Arrays durch, hat jedoch leicht unterschiedliche Regeln für die Behandlung von mehrdimensionalen Arrays. Die beiden Arrays müssen die gleiche Form haben, außer für die letzten beiden Dimensionen, die übereinstimmen müssen. Wenn eines der Arrays 1-D ist, wird es durch Anhängen einer 1 an seine Form zu einer Matrix aufgestockt.
C = np.matmul(A, B)
print(C)
## Ausgabe:
## array([[19, 22],
## [43, 50]])
In diesem Beispiel erhalten wir das gleiche Ergebnis wie mit numpy.dot
. Dies liegt daran, dass unsere Arrays A
und B
die gleiche Form haben, sodass numpy.matmul
auf die gleiche Weise wie numpy.dot
funktioniert.
Und hier ist ein anderes unterschiedliches Beispiel:
## definieren Sie zwei 3-D Arrays
a = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
b = np.array([[[9, 10], [11, 12]], [[13, 14], [15, 16]]])
c = np.matmul(a, b)
d = np.dot(a, b)
print(c)
## Ausgabe:
## array([[[ 31, 34],
## [ 71, 78]],
## [[155, 166],
## [211, 226]]])
print(d)
## Ausgabe:
## array([[[[ 31, 34],
## [ 43, 46]],
## [[ 71, 78],
## [ 99, 106]]],
## [[[111, 122],
## [155, 166]],
## [[151, 166],
## [211, 226]]]])
In diesem Beispiel führt numpy.matmul
die Batch-Matrizenmultiplikation durch.
Da sowohl a
als auch b
3-D Arrays sind, wird die Ausgabe von numpy.dot
eine Dimension (2,2,2,2) haben. Die ersten beiden Dimensionen entsprechen den zwei Batches von 2\times2-Matrizen in a
und b
. Die nächsten beiden Dimensionen entsprechen dem Skalarprodukt jeder Paar von 2\times2-Matrizen in den Batches:
## das erste 2 × 2-Ergebnis
dot(a[0], b[0]) =
dot([[1, 2],
[3, 4]],
[[9, 10],
[11, 12]]
= [[1*9 + 2*11, 1*10 + 2*12],
[3*9 + 4*11, 3*10 + 4*12]]
= [[31, 34],
[43, 46]]