Aller au contenu principal

🔢 Produit matriciel (NumPy)

La fonction np.dot est fondamentale en NumPy pour effectuer des multiplications de matrices et des produits scalaires. Elle est omniprésente en science des données et en apprentissage machine.

Qu'est-ce que le produit matriciel ?​

Le produit matriciel n'est pas une simple multiplication élément par élément. C'est une opération qui combine les rangées de la première matrice avec les colonnes de la seconde.

Pour multiplier une matrice AA par une matrice BB:

  1. Le nombre de colonnes de AA doit être égal au nombre de rangées de BB.
  2. La matrice résultante aura le nombre de rangées de AA et le nombre de colonnes de BB.

Imaginez que nous voulons calculer C=Aâ‹…BC = A \cdot B.

Formule mathématique​

Chaque élément cijc_{ij} de la matrice résultat est la somme des produits des éléments de la rangée ii de AA et de la colonne jj de BB.

cij=∑kaikbkjc_{ij} = \sum_k a_{ik} b_{kj}

Cela correspond mathématiquement au produit scalaire du vecteur rangée ii de AA avec le vecteur colonne jj de BB.

Exemple détaillé​

Prenons deux matrices :

A=[123456],B=[789101112]A = \begin{bmatrix} 1 & 2 & 3 \\ 4 & 5 & 6 \end{bmatrix}, \quad B = \begin{bmatrix} 7 & 8 \\ 9 & 10 \\ 11 & 12 \end{bmatrix}

Calculons le résultat :

  • Position (0,0) : rangée 0 de A â‹…\cdot colonne 0 de B (1×7)+(2×9)+(3×11)=7+18+33=58(1 \times 7) + (2 \times 9) + (3 \times 11) = 7 + 18 + 33 = 58

    [123456]â‹…[789101112]=[58.........]\begin{bmatrix} \textcolor{red}{1} & \textcolor{red}{2} & \textcolor{red}{3} \\ 4 & 5 & 6 \end{bmatrix} \cdot \begin{bmatrix} \textcolor{red}{7} & 8 \\ \textcolor{red}{9} & 10 \\ \textcolor{red}{11} & 12 \end{bmatrix} = \begin{bmatrix} \textcolor{red}{58} & ... \\ ... & ... \end{bmatrix}
  • Position (0,1) : rangée 0 de A â‹…\cdot colonne 1 de B (1×8)+(2×10)+(3×12)=8+20+36=64(1 \times 8) + (2 \times 10) + (3 \times 12) = 8 + 20 + 36 = 64

  • Position (1,0) : rangée 1 de A â‹…\cdot colonne 0 de B (4×7)+(5×9)+(6×11)=28+45+66=139(4 \times 7) + (5 \times 9) + (6 \times 11) = 28 + 45 + 66 = 139

  • Position (1,1) : rangée 1 de A â‹…\cdot colonne 1 de B (4×8)+(5×10)+(6×12)=32+50+72=154(4 \times 8) + (5 \times 10) + (6 \times 12) = 32 + 50 + 72 = 154

Résultat final :

C=[5864139154]C = \begin{bmatrix} 58 & 64 \\ 139 & 154 \end{bmatrix}

Utilisation de np.dot​

NumPy rend ce calcul très simple.

import numpy as np

# Définition des matrices
A = np.array([[1, 2, 3],
[4, 5, 6]])

B = np.array([[7, 8],
[9, 10],
[11,12]])

# Calcul du produit matriciel
C = np.dot(A, B)

print(C)
# Affiche :
# [[ 58 64]
# [139 154]]
Information

Depuis Python 3.5, vous pouvez utiliser l'opérateur @ qui est un raccourci syntaxique pour le produit matriciel.

C = A @ B  # Exactement équivalent à np.dot(A, B) pour des matrices 2D
Attention

Une erreur fréquente est d'utiliser l'astérisque * pour multiplier des matrices. En NumPy, * effectue une multiplication élément par élément, ce qui est mathématiquement différent.

Astuce

Pour ne pas avoir d'erreurs, vérifiez toujours les dimensions (shapes) :

(m,n)⋅(n,p)→(m,p)(m, n) \cdot (n, p) \rightarrow (m, p)

Les dimensions "intérieures" (nn) doivent correspondre.