Adloun

mathématiques appliquées (ECG 1re année) · Chapitre 2 · Exercice

Multiplier deux matrices à la main

Calcul matriciel et systèmes linéaires · Produit, transposition et commutation · niveau 3 (difficile)

É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.

Exercices semblables

Le cours du chapitre · Tous les exercices du chapitre