Qu’est-ce qu’une matrice ?
Une matrice est un tableau de nombres rangés en lignes et en colonnes, et le produit matriciel combine deux tableaux en un seul. Vous saurez multiplier une matrice par un vecteur, puis par une autre matrice.
Deux boutiques vendent trois produits. Pour connaître la recette de chacune, on multiplie le tableau des ventes par les prix.
À la fin de cette leçon
Remarque
Je peux multiplier une matrice par un vecteur et par une autre matrice.
Mots clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Matrice | un tableau de nombres en lignes et en colonnes | |
| Ligne | une rangée horizontale de la matrice | |
| Colonne | une rangée verticale de la matrice | |
| Forme | le nombre de lignes puis de colonnes | (2, 3) |
| Produit matriciel | le produit scalaire de chaque ligne avec chaque colonne |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Chaque ligne fait un produit scalaire
La boutique A a vendu 2, 1 et 0 exemplaires de trois produits. La boutique B en a vendu 1, 3 et 2. Ces ventes forment une matrice de deux lignes et trois colonnes.
Les prix sont 3, 2 et 4 €. Pour chaque boutique, on fait le produit scalaire de sa ligne avec le vecteur des prix. Le résultat est un vecteur : une recette par boutique.
Exemple travaillé : les recettes
| Boutique | Calcul | Recette en euros |
|---|---|---|
| A (ligne 2, 1, 0) | 2 × 3 + 1 × 2 + 0 × 4 | 8 |
| B (ligne 1, 3, 2) | 1 × 3 + 3 × 2 + 2 × 4 | 17 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Les recettes en Python
# Ventes de deux boutiques : une ligne par boutique, une colonne par produit.
ventes = [[2, 1, 0], [1, 3, 2]]
# Prix en euros des trois produits.
prix = [3, 2, 4]
for ligne in ventes:
recette = 0
for j in range(len(prix)):
recette = recette + ligne[j] * prix[j]
print("recette :", recette, "euros")
# Remplacez le 0 de la première ligne par 5, puis relancez.
# Quelle recette change, et de combien ?
Une matrice fois un vecteur avec NumPy
docker exec jupyter python3 -c "import numpy as np; A = np.array([[1, 2], [3, 4]]); print(A @ np.array([1, 1]))"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Les formes doivent s’emboîter
On ne peut multiplier deux matrices que si le nombre de colonnes de la première égale le nombre de lignes de la seconde. Sinon les produits scalaires n’ont pas la même taille.
Une matrice (2, 3) fois une matrice (3, 4) donne une matrice (2, 4). On garde les deux nombres extérieurs.
Exemple travaillé : trois produits possibles ou non
| Première forme | Seconde forme | Possible ? | Forme du produit |
|---|---|---|---|
| (2, 3) | (3, 4) | oui | (2, 4) |
| (2, 2) | (2, 1) | oui | (2, 1) |
| (2, 3) | (2, 3) | non | aucune |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
La forme d’un produit de matrices
docker exec jupyter python3 -c "import numpy as np; print((np.ones((2, 3)) @ np.ones((3, 4))).shape)"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Le produit remplit une case à la fois
Prenons la case de la ligne i et de la colonne j du résultat. On fait le produit scalaire de la ligne i de la première matrice avec la colonne j de la seconde.
Avec A = [[1, 2], [3, 4]] et B = [[0, 1], [1, 0]], la première case vaut 1 × 0 + 2 × 1, soit 2. On remplit ainsi les quatre cases.
Exemple travaillé : A fois B
| Case | Ligne de A avec colonne de B | Valeur |
|---|---|---|
| ligne 1, colonne 1 | 1 × 0 + 2 × 1 | 2 |
| ligne 1, colonne 2 | 1 × 1 + 2 × 0 | 1 |
| ligne 2, colonne 1 | 3 × 0 + 4 × 1 | 4 |
| ligne 2, colonne 2 | 3 × 1 + 4 × 0 | 3 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Le produit de A par B avec NumPy
docker exec jupyter python3 -c "import numpy as np; A = np.array([[1, 2], [3, 4]]); B = np.array([[0, 1], [1, 0]]); print(A @ B)"Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.
Une erreur fréquente
Attention
Beaucoup pensent que A fois B donne la même chose que B fois A. C’est faux. Avec les matrices du tableau, A fois B donne [[2, 1], [4, 3]] et B fois A donne [[3, 4], [1, 2]]. L’ordre compte toujours.
Pour aller plus loin
Dans un carnet, écrivez deux matrices de forme (3, 3) avec NumPy et comparez A @ B avec B @ A.
Un réseau de neurones, vu plus tard, n’est qu’une suite de produits de matrices : une couche multiplie ses entrées par une matrice de poids.