0Pricing
Pandas & NumPy Academy · Leçon

Multiplication matricielle avec np.matmul et @

Multipliez correctement des matrices avec np.matmul et l’opérateur @, et distinguez la multiplication terme à terme * de la véritable multiplication matricielle.

Multiplication matricielle avec np.matmul et @ est une leçon Pandas & NumPy Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Pandas & NumPy Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Pandas & NumPy Academy comprend 4 leçons au total.

Pourquoi la multiplication matricielle est importante

La multiplication matricielle est au cœur de la science des données et de l’apprentissage automatique. Elle sous-tend les réseaux neuronaux, la réduction dimensionnelle et les transformations linéaires. En Python, NumPy propose deux moyens simples de multiplier des matrices : la fonction np.matmul() et l’opérateur @, introduit dans Python 3.5. Les deux sont rapides, vectorisés et bien plus efficaces que des boucles Python imbriquées.

Les règles de la multiplication matricielle

Pour deux matrices A et B, le produit A @ B n’est valide que lorsque le nombre de colonnes de A est égal au nombre de lignes de B. Si A est de forme (m, n) et B de forme (n, k), le résultat est de forme (m, k). Cette règle, appelée contrainte des dimensions internes, s’applique quelle que soit la fonction NumPy utilisée.

import numpy as np
A = np.array([[1, 2], [3, 4]])   # shape (2, 2)
B = np.array([[5, 6], [7, 8]])   # shape (2, 2)
C = A @ B
print(C)  # [[19 22] [43 50]]

np.matmul et l’opérateur @

np.matmul(A, B) et A @ B produisent des résultats identiques pour les tableaux 2D. L’opérateur @ est simplement du sucre syntaxique : en interne, il appelle __matmul__, que NumPy implémente avec la même routine BLAS au niveau C. Utilisez @ dans le code courant pour améliorer la lisibilité ; utilisez np.matmul lorsque vous souhaitez transmettre la fonction comme fonction appelable ou traiter explicitement des cas particuliers.

import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print(np.matmul(A, B))   # same as A @ B
print(A @ B)             # same result

Distinguer @, * et np.dot

NumPy possède trois fonctions de multiplication qu’il est facile de confondre. A * B effectue une multiplication terme à terme (produit de Hadamard). np.dot(A, B) se comporte comme np.matmul pour les tableaux 2D, mais possède une sémantique différente pour les dimensions supérieures. A @ B est strictement une multiplication matricielle et suit précisément la définition mathématique : préférez-le à np.dot pour les opérations sur les matrices.

import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print('element-wise:', A * B)    # [[5 12] [21 32]]
print('matmul:', A @ B)          # [[19 22] [43 50]]

La multiplication matricielle n’est pas commutative

Contrairement à la multiplication des scalaires, la multiplication matricielle n’est pas commutative : A @ B diffère généralement de B @ A. Les dimensions peuvent même ne pas être compatibles dans les deux sens. Cela est important lorsque vous écrivez des transformations : l’ordre des opérations modifie le résultat. Vérifiez toujours quelle matrice se trouve à gauche et laquelle se trouve à droite.

import numpy as np
A = np.array([[1, 2], [3, 4]])
B = np.array([[0, 1], [1, 0]])
print('A @ B:', A @ B)   # [[2 1] [4 3]]
print('B @ A:', B @ A)   # [[3 4] [1 2]]  -- different!

Multiplication matricielle par lots

Lorsque vos tableaux ont plus de deux dimensions, np.matmul et @ considèrent les dimensions supplémentaires en tête comme des dimensions de lot et multiplient les matrices en parallèle. Par exemple, la multiplication d’un tableau de forme (32, 3, 4) par un tableau de forme (32, 4, 5) produit un résultat de forme (32, 3, 5) : 32 multiplications indépendantes de matrices 3×4 @ 4×5 en une seule fois. C’est ainsi que les frameworks d’apprentissage profond traitent efficacement les mini-lots.

import numpy as np
batch_A = np.random.rand(32, 3, 4)
batch_B = np.random.rand(32, 4, 5)
result = batch_A @ batch_B
print(result.shape)  # (32, 3, 5)

Multiplication matrice-vecteur

Un cas particulier courant consiste à multiplier une matrice par un vecteur. Si A est de forme (m, n) et que v est un tableau 1D de longueur n, alors A @ v produit un tableau 1D de longueur m. NumPy gère automatiquement l’alignement des dimensions : vous n’avez pas besoin de remodeler v en vecteur colonne. Ce schéma apparaît partout : application de poids en régression linéaire, projection de caractéristiques et calcul simultané des produits scalaires de chaque ligne.

import numpy as np
A = np.array([[1, 2, 3], [4, 5, 6]])  # (2, 3)
v = np.array([1, 0, -1])              # (3,)
print(A @ v)   # [1-3, 4-6] = [-2, -2]

Performances : @ contre les boucles Python

La multiplication matricielle de NumPy appelle des routines BLAS/LAPACK optimisées et s’exécute dans du code C compilé. Une boucle imbriquée en Python pur qui réalise la même opération est généralement 100 à 1 000 fois plus lente pour les grandes matrices. Lorsque vous devez effectuer des produits matriciels répétés dans un pipeline de données — transformations de caractéristiques, projections PCA, mises à jour des poids — utilisez toujours @ ou np.matmul et n’implémentez jamais vous-même la boucle interne.

import numpy as np, time
A = np.random.rand(500, 500)
B = np.random.rand(500, 500)
t0 = time.time()
C = A @ B
print(f'NumPy: {(time.time()-t0)*1000:.1f} ms')  # single-digit ms

Enchaîner plusieurs produits matriciels

Vous pouvez enchaîner plusieurs opérations @ dans une même expression : A @ B @ C est évaluée de gauche à droite. NumPy n’optimise pas automatiquement l’ordre des multiplications (contrairement à MATLAB avec mtimes), donc l’ordre peut avoir une incidence sur la vitesse si les matrices ont des tailles très différentes. Pour trois matrices ou plus, envisagez d’utiliser np.linalg.multi_dot([A, B, C]), qui sélectionne automatiquement le regroupement le plus efficace.

import numpy as np
A = np.random.rand(100, 20)
B = np.random.rand(20, 50)
C = np.random.rand(50, 10)
result = np.linalg.multi_dot([A, B, C])
print(result.shape)  # (100, 10)

Erreurs courantes de dimensions et comment les corriger

L’erreur la plus courante avec la multiplication matricielle est une incompatibilité de formes : ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0. Pour la corriger, vérifiez les formes avec A.shape et assurez-vous que les dimensions internes correspondent. Si vous avez un vecteur ligne de forme (n,) qui doit être traité comme un vecteur colonne (n, 1), utilisez v.reshape(-1, 1). Si vous avez besoin de la transposée, utilisez A.T.

import numpy as np
A = np.ones((3, 4))
B = np.ones((3, 4))  # wrong -- inner dims 4 != 3
try:
    A @ B
except ValueError as e:
    print('Error:', e)
print('Fix:', (A @ B.T).shape)  # (3, 3)

Exemple pratique : transformation de caractéristiques

Voici un cas d’utilisation courant en science des données : vous disposez d’un jeu de données X de forme (n_samples, n_features) et d’une matrice de poids W de forme (n_features, n_outputs). Le produit matriciel X @ W applique une transformation linéaire à chaque échantillon simultanément et produit une forme (n_samples, n_outputs). Il s’agit du calcul central d’une couche linéaire dans un réseau neuronal et de la prédiction par régression linéaire.

import numpy as np
n_samples, n_features, n_outputs = 200, 10, 3
X = np.random.rand(n_samples, n_features)
W = np.random.rand(n_features, n_outputs)
b = np.zeros(n_outputs)
predictions = X @ W + b   # shape (200, 3)
print(predictions.shape)

Vérification rapide

Testez votre compréhension de la multiplication matricielle avec NumPy.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que np.matmul et @ réalisent une véritable multiplication matricielle (et non une multiplication terme à terme), que les dimensions internes des deux matrices doivent correspondre et que @ prend en charge la multiplication par lots sur les dimensions initiales. Nous allons maintenant étudier les déterminants, les inverses et les transposées : les opérations qui indiquent si une matrice peut être « défaite ».

Questions Fréquemment Posées

La leçon « Multiplication matricielle avec np.matmul et @ » est-elle gratuite ?

Oui — le texte complet de « Multiplication matricielle avec np.matmul et @ » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Pandas & NumPy Academy, passe à CoddyKit PRO. Le cours Pandas & NumPy Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Multiplication matricielle avec np.matmul et @ » ?

Multipliez correctement des matrices avec np.matmul et l’opérateur @, et distinguez la multiplication terme à terme * de la véritable multiplication matricielle. Tu pratiques Pandas & NumPy Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Pandas & NumPy Academy ?

Aucune expérience préalable n'est requise. Pandas & NumPy Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Multiplication matricielle avec np.matmul et @ » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Pandas & NumPy Academy ?

Oui. Chaque leçon Pandas & NumPy Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Multiplication matricielle avec np.matmul et @
  2. Déterminants, inverses et transposées
  3. Résolution de systèmes linéaires
  4. Valeurs propres et présentation de la SVD
← Retour à Pandas & NumPy Academy