numpy.matmul
La fonction numpy.matmul
effectue également une multiplication de matrices entre deux tableaux, mais elle a des règles légèrement différentes pour gérer les tableaux multidimensionnels. Les deux tableaux doivent avoir la même forme, sauf pour les deux dernières dimensions, qui doivent être conformes. Si l'un des tableaux est 1-D, il est promu à une matrice en ajoutant un 1 à sa forme.
C = np.matmul(A, B)
print(C)
## Sortie :
## array([[19, 22],
## [43, 50]])
Dans cet exemple, nous obtenons le même résultat qu'avec numpy.dot
. C'est parce que nos tableaux A
et B
ont la même forme, donc numpy.matmul
se comporte de la même manière que numpy.dot
.
Et voici un autre exemple différent :
## définir deux tableaux 3-D
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)
## Sortie :
## array([[[ 31, 34],
## [ 71, 78]],
## [[155, 166],
## [211, 226]]])
print(d)
## Sortie :
## array([[[[ 31, 34],
## [ 43, 46]],
## [[ 71, 78],
## [ 99, 106]]],
## [[[111, 122],
## [155, 166]],
## [[151, 166],
## [211, 226]]]])
Dans cet exemple, numpy.matmul
effectue l'opération de multiplication de matrices par lots.
Puisque a
et b
sont des tableaux 3-D, la sortie de numpy.dot
aura une dimensionnalité (2,2,2,2). Les deux premières dimensions correspondent aux deux lots de matrices 2\times2 dans a
et b
. Les deux dimensions suivantes correspondent au produit scalaire de chaque paire de matrices 2\times2 dans les lots :
## le premier résultat 2 × 2
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]]