Participer au site avec un Tip
Rechercher
 

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 :

Vous êtes un professionnel et vous avez besoin d'une formation ? Deep Learning avec Python
et Keras et Tensorflow
Voir le programme détaillé

Algèbre linéaire avec NumPy

Génération aléatoire moderne Charger et enregistrer des données


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

Introduction

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.

Produit terme à terme et produit matriciel

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))
Différence entre *, @ et dot

[[ 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.

Produit matrice-vecteur

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)
Produit entre une matrice et un vecteur

[ 8 18]

Calculer une norme

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))
Norme d'un vecteur

5.0

Trace, déterminant et inverse

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))
Trace, déterminant et inverse

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.

Résoudre un système linéaire

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))
Résolution via la matrice inverse

[ 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)
Résolution avec np.linalg.solve

[ 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.

Valeurs propres et vecteurs propres

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)
Calcul de valeurs propres

[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.

Génération aléatoire moderne Charger et enregistrer des données




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation Python
Les compléments
Voir le programme détaillé