Dans cet exemple, nous allons apprendre à multiplier les matrices de deux manières différentes: boucle imbriquée et comprenhension de liste imbriquée
Pour comprendre cet exemple, vous devez avoir la connaissance des sujets de programmation Python suivants:
- Python pour Loop
- Liste Python
- Matrices Python et tableaux NumPy
En Python, nous pouvons implémenter une matrice sous forme de liste imbriquée (liste dans une liste).
Nous pouvons traiter chaque élément comme une ligne de la matrice.
Par exemple X = ((1, 2), (4, 5), (3, 6))
représenterait une 3x2
matrice.
La première ligne peut être sélectionnée comme X(0)
. Et, l'élément de la première ligne, la première colonne peut être sélectionnée comme X(0)(0)
.
La multiplication de deux matrices X et Y n'est définie que si le nombre de colonnes dans X est égal au nombre de lignes Y.
Si X est une n x m
matrice et Y est une m x l
matrice, alors XY est défini et a la dimension n x l
(mais YX n'est pas défini). Voici quelques façons d'implémenter la multiplication matricielle en Python.
Code source: Multiplication matricielle à l'aide d'une boucle imbriquée
# Program to multiply two matrices using nested loops # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((0,0,0,0), (0,0,0,0), (0,0,0,0)) # iterate through rows of X for i in range(len(X)): # iterate through columns of Y for j in range(len(Y(0))): # iterate through rows of Y for k in range(len(Y)): result(i)(j) += X(i)(k) * Y(k)(j) for r in result: print(r)
Production
(114, 160, 60, 27) (74, 97, 73, 14) (119, 157, 112, 23)
Dans ce programme, nous avons utilisé des for
boucles imbriquées pour parcourir chaque ligne et chaque colonne. Nous accumulons la somme des produits dans le résultat.
Cette technique est simple mais coûteuse en calcul car nous augmentons l'ordre de la matrice.
Pour les opérations matricielles plus importantes, nous recommandons des progiciels optimisés comme NumPy, qui sont plusieurs (de l'ordre de 1000) fois plus rapides que le code ci-dessus.
Code source: Multiplication matricielle à l'aide de la compréhension de liste imbriquée
# Program to multiply two matrices using list comprehension # 3x3 matrix X = ((12,7,3), (4 ,5,6), (7 ,8,9)) # 3x4 matrix Y = ((5,8,1,2), (6,7,3,0), (4,5,9,1)) # result is 3x4 result = ((sum(a*b for a,b in zip(X_row,Y_col)) for Y_col in zip(*Y)) for X_row in X) for r in result: print(r)
La sortie de ce programme est la même que ci-dessus. Pour comprendre le code ci-dessus, nous devons d'abord connaître la fonction intégrée zip()
et le déballage de la liste d'arguments à l'aide de l'opérateur *.
Nous avons utilisé la compréhension de liste imbriquée pour parcourir chaque élément de la matrice. Le code semble compliqué et illisible au début. Mais une fois que vous maîtrisez la compréhension des listes, vous ne retournerez probablement pas aux boucles imbriquées.