Idée
Quand on écrit A * B avec deux tableaux, le calcul se fait case par case (multiplication coordonnée a coordonnée).
Pourquoi
Quand on écrit A * B avec deux tableaux Numpy, le calcul se fait case par case (multiplication coordonnée a coordonnée), ce qui exige même forme. Pour combiner vraiment deux matrices au sens de l'algèbre linéaire (sommer des lignes contre des colonnes), il faut un autre symbole : @ ou np.dot. C'est la distinction entre le produit de Hadamard (terme a terme) et le produit matriciel usuel $\sum_k a_{ik} b_{kj}$ vu en spé. Confondre les deux est une erreur frequente. Le piège classique : oublier qu'A * B et A @ B sont deux opérations différentes — l'une exige même forme, l'autre exige formes compatibles.
Outil
Distinction produit de Hadamard (terme a terme) vs produit matriciel $\sum_k a_{ik} b_{kj}$ de l'algèbre linéaire MPSI.
Formule
A * B $\equiv (a_{ij} b_{ij}){i,j}$ (Hadamard) ; A @ B $\equiv \sum_k a{ik} b_{kj}$ (produit matriciel).
Piège
Tentation classique : un MPSI lit A * B et pense au produit matriciel de l'algèbre linéaire. En NumPy * est le produit terme à terme (Hadamard) ; le produit matriciel s'écrit A @ B ou np.dot(A, B).
Diagramme
graph LR A((A)) --> star[A * B case par case] B((B)) --> star A --> at[A @ B somme ligne contre colonne] B --> at star --> H((produit Hadamard)) at --> M((produit matriciel))