Multiplier deux matrices à la main
Exercice · niveau 3 (difficile) · mathématiques appliquées (ECG 1re année), chapitre 2 — Calcul matriciel et systèmes linéaires · Produit, transposition et commutation
Énoncé
Écrire une fonction Python produit(A, B) qui calcule le produit de deux matrices données comme listes de listes, sans utiliser numpy. Combien de multiplications effectue-t-elle pour deux matrices ?
Corrigé
def produit(A, B):
n, p, q = len(A), len(B), len(B[0])
assert len(A[0]) == p, "dimensions incompatibles"
C = [[0] * q for _ in range(n)]
for i in range(n):
for j in range(q):
s = 0
for k in range(p):
s = s + A[i][k] * B[k][j]
C[i][j] = s
return C
Le compte. Les trois boucles imbriquées parcourent triplets, et chacun coûte exactement une multiplication. Pour deux matrices , cela fait multiplications (et additions).
C'est une complexité cubique : doubler la taille multiplie le temps par huit. Sur , on est déjà à un milliard d'opérations — et c'est la raison pour laquelle on délègue ce calcul à numpy, dont les boucles sont compilées.
L'assert n'est pas décoratif : sans lui, un décalage de dimensions lèverait une erreur d'indice obscure au fond de la troisième boucle, au lieu de dire tout de suite ce qui ne va pas.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.