Opération sur les matrices avec numpy en Python

Effectuer des calculs sur les matrices est, souvent, une opération fastidieuse et source de nombreuses erreurs. L'algorithme naïf de multiplication de matrice possède, par exemple, une complexité cubique, rendant le calcul manuel de grandes matrices vite impossible. Utiliser un ordinateur pour effectuer ce genre de calculs me semble donc une bonne chose à faire. Pour aujourd'hui, je vais vous présenter quelques fonctions en python, permettant d'effectuer des opérations sur les matrices en juste quelques lignes de codes.

Importer numpy

Avant toute chose, pour effectuer des calculs scientifiques, vous devez importer la bibliothèque numpy.

import numpy as np 

Addition et Multiplication de Matrices

M1 = np.array([ [1.,1.,1.],
                [1.,3.,1.],
                [1.,1.,1.]])
M2 = np.array([ [1.,1.,1.],
                [1.,2.,1.],
                [1.,1.,1.]])
MResultAdd = np.add(M1,M2)
MResultSous = np.subtract(M1,M2)
MResultMulti = M1.dot(M2)

Trace de Matrices

La trace d’une matrice est la somme des valeurs de la diagonale de la matrice.

M1 = np.array([ [1.,1.,1.],
                [1.,3.,1.],
                [1.,1.,1.]])

Déterminant de Matrices

Le calcul du déterminant d’une matrice est un outil nécessaire en algèbre linéaire afin de vérifier une inversibilité ou pour calculer l’inverse d’une matrice. (Wikipédia)

M1 = np.array([ [1.,1.,1.],
                [1.,3.,1.],
                [1.,1.,1.]])
Determinant = np.linalg.det(M1)

Transposée de Matrices

La transposée d’une matrice A est une matrice B telle que les colonnes et lignes de la matrice A deviennent respectivement les lignes et colonnes de la matrice B.

M1 = np.array([ [1.,1.,2.],
                [6.,3.,1.],
                [1.,1.,1.]])
Transpose = M1.transpose()

Inverse de Matrices

L’inverse de matrice prend toute son utilité dans le calcul de systèmes linéaires. Si $Ax=B$, alors $x=A^{-1}B$.

Une matrice A admet une inverse si et seulement si son déterminant est différent de 0. Il est donc important de le tester au préalable :).

M1 = np.array([ [1.,1.,1.],
                [1.,3.,2.],
                [1.,5.,1.]])
Inverse = np.linalg.inv(M1)

Valeurs propres et Vecteurs propres de Matrices

Veuillez bien prendre en compte le fait que les vecteurs propres ne sont pas uniques, l’échelle (la longueur), le signe, ou l’ordre peuvent être différents.

M1 = np.array([ [1.,1.,2.],
                [6.,3.,1.],
                [1.,1.,1.]])
Eig = np.linalg.eig(M1)

Pour en savoir plus sur le sujet, je vous renvoie vers mon article sur les valeurs et vecteurs propres.

Décomposition de Cholesky de Matrices

La décomposition de Cholesky permet de décomposer une matrice symétrique définie positive en un produit d’une matrice L par sa transposée.

M1 = np.array([ [1,2],
                [2,7] ])
np.linalg.cholesky(M1)

Le résultat de np.linalg.cholesky(M1) sera cette matrice L.

Pour en savoir plus sur l’utilité et le calcul de la matrice de Cholesky, c’est ici.

Conditionnement de Matrice

Pour définir correctement le conditionnement d’une matrice, je vous suggère mon article sur ce sujet.

M1 = np.array([ [1,7,2,1],
                [7,5,1,5],
                [8,6,10,9],
                [7,5,9,1] ])
Cond = np.linalg.cond(M1)

Par défaut, np.linalg.cond n’utilise pas la norme infinie. Si vous souhaitez l’utiliser, je vous propose de rajouter cette option :

M1 = np.array([ [1,7,2,1],
                [7,5,1,5],
                [8,6,10,9],
                [7,5,9,1] ])
Cond = np.linalg.cond(M1,np.inf)

Pour plus de paramètres, c’est ici.

Pour aller plus loin….

Numpy propose encore un nombre très important de fonctions relatives aux matrices….

Ici se trouvent par exemple un certain nombre d’entre-elles : https://docs.scipy.org/doc/numpy/reference/routines.linalg.html

Sources :