Accès rapide :
Introduction
Produit terme à terme et produit matriciel
Produit matrice-vecteur
Calculer une norme
Trace, déterminant et inverse
Résoudre un système linéaire
Valeurs propres et vecteurs propres
NumPy fournit les opérations de base pour travailler avec des vecteurs et des matrices. Ce chapitre ne remplace pas un cours d'algèbre linéaire, mais il présente les fonctions les plus utiles pour manipuler des tableaux numériques.
Avec NumPy, l'opérateur * réalise un produit terme à terme. Pour réaliser un produit
matriciel, on utilise l'opérateur @. La fonction np.dot permet d'obtenir le même
résultat avec deux matrices 2D.
1 2 3 4 5 6 7 8 |
import numpy as np A = np.array([[1, 2], [3, 4]]) B = np.array([[10, 20], [30, 40]]) print(A * B) print(A @ B) print(np.dot(A, B)) |
[[ 10 40] [ 90 160]] [[ 70 100] [150 220]] [[ 70 100] [150 220]]
Les deux résultats sont très différents. Le premier multiplie les valeurs de même position, tandis que le second et le troisième appliquent la règle du produit matriciel.
Le produit matriciel fonctionne aussi entre une matrice et un vecteur compatible.
1 2 3 4 5 6 |
import numpy as np A = np.array([[1, 2], [3, 4]]) v = np.array([2, 3]) print(A @ v) |
[ 8 18]
La fonction np.linalg.norm permet de calculer la norme d'un vecteur. Pour un vecteur
à deux dimensions, cela correspond à la longueur géométrique du vecteur.
1 2 3 4 5 |
import numpy as np v = np.array([3, 4]) print(np.linalg.norm(v)) |
5.0
Le sous-module np.linalg contient plusieurs fonctions classiques d'algèbre linéaire.
1 2 3 4 5 6 7 |
import numpy as np A = np.array([[2, 1], [1, 3]], dtype=np.float64) print(np.trace(A)) print(round(np.linalg.det(A), 2)) print(np.linalg.inv(A)) |
5.0 5.0 [[ 0.6 -0.2] [-0.2 0.4]]
Toutes les matrices ne sont pas inversibles. Si le déterminant vaut zéro, l'inverse n'existe pas.
Pour résoudre un système de la forme A x = b, NumPy manipule directement la matrice
des coefficients et le vecteur des constantes. Prenons le système suivant, à trois inconnues :
2x - 3y + z = -8 x + y + z = 3 3x - y + z = -1
Une première manière de retrouver la solution consiste à inverser la matrice des coefficients, puis à effectuer un produit matriciel avec le vecteur des constantes.
1 2 3 4 5 6 7 8 9 10 |
import numpy as np m = np.array([[2, -3, 1], [1, 1, 1], [3, -1, 1]]) im = np.linalg.inv(m) v = np.array([-8, 3, -1]) print(im.dot(v)) |
[ 1. 3. -1.]
Dans un vrai calcul, préférez toutefois np.linalg.solve. Cette fonction exprime directement
l'intention du code et évite de calculer explicitement l'inverse de la matrice.
1 2 3 4 5 6 7 8 9 10 11 12 |
import numpy as np m = np.array([[2, -3, 1], [1, 1, 1], [3, -1, 1]]) v = np.array([-8, 3, -1]) x = np.linalg.solve(m, v) print(x) print(m @ x) |
[ 1. 3. -1.] [-8. 3. -1.]
Le second affichage vérifie que la solution trouvée redonne bien le vecteur v lorsque l'on
calcule m @ x.
Les valeurs propres et vecteurs propres sont des notions plus avancées, mais NumPy permet de les calculer
avec np.linalg.eig.
1 2 3 4 5 6 7 |
import numpy as np A = np.array([[2, 0], [0, 3]], dtype=np.float64) values, vectors = np.linalg.eig(A) print(values) print(vectors) |
[2. 3.] [[1. 0.] [0. 1.]]
Cette matrice diagonale est volontairement très simple : ses valeurs propres sont directement les valeurs placées sur sa diagonale.
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :