Vous êtes sur la page 1sur 11

Chapitre 3 : Opérations matricielles

.I. Les matrices en Python


• Une matrice est un tableau numérique bidimensionnel.
• Cet objet peut se représenter sous diverses formes en Python.
• Nous choisissons, ici, d’utiliser la fonction array().

1. La bibliothèque numpy
• Afin de manipuler des matrices, la bibliothèque numpy est requise
• Numpy est un package pour Python spécialisé dans la manipulation des tableaux (arrays). Dans
cette bibliothèque, un tableau ne gère que les objets de même type.
• Numpy doit être appelée afin de pouvoir l’utiliser :
import numpy as np

• Numpy est intégrée par défaut avec Spyder


• Pour IDLE, cette bibliothèque doit être installée manuellement :
python -m pip – install numpy
• Numpy propose un grand nombre de fonctions pour un accès rapide aux données (recherche,
extraction), pour les manipulations diverses (tri), pour les calculs (calcul statistique).
• Les tableaux numpy sont plus performants (rapidité, gestion de la volumétrie) que les listes usuelles
de Python. Ils sont sous-jacents à de nombreux packages dédiés au calcul scientifique sous Python.

2. Création d’une matrice


• La création de la matrice se fait en saisissant une à une les valeurs de chacun des termes
• Le séparateur entre les différentes lignes ou valeurs est la virgule ,
ISAMM 1ère IM

Exemple :

import numpy as np
mat = np.array ([[1,0,4,8],[9,3,2,2],[5,10,-2,-5]])
print(mat) [[ 1 0 4 8]
[ 9 3 2 2]
[ 5 10 -2 -5]]

3. Dimensions d’une matrice


• La fonction shape() permet de donner les dimensions d’une matrice.

print(mat.shape) (3, 4)

4. Accès à un élément d’une matrice


a) Accès par élément
• L’accès à un élément d’une matrice se fait à l’aide de l’opération d’indexage [i, j] où i désigne la
ligne et j la colonne.
• Notons que les indices commencent à zéro !
Exemple :

i=mat [0,3] #ligne 1 colonne 4


print(i) 8

b) Accès par intervalles


• À l’aide d’intervalles, on peut également récupérer une partie d’une matrice : ligne, colonne, sous-
matrice.
• Rappel :
o « a:b » désigne l’intervalle ouvert à droite [a, b[
o « : » désigne l’intervalle contenant tous les indices de la dimension considérée. Notez la
différence entre l’indexation par un entier et par un intervalle réduit à un entier.

Programmation Python 27
ISAMM 1ère IM

Exemples :

print(mat [1,0]) # 2e ligne, 1ere colonne 9


e
print(mat[2,:]) # 3 ligne [ 5 10 -2 -5]
print(mat[0:2, :]) # Afficher les 2 premières lignes [[1 0 4 8]
[9 3 2 2]]
print(mat[:,1:3]) # Afficher colonnes 2 et 3 [[ 0 4]
[ 3 2]
[10 -2]]

5. Matrices particulières

a) La fonction zeros
• Les fonctions np.zeros() permet de créer une matrice remplie de zéros.

a=np.zeros(3,2)
print(a) [[0. 0.]
[0. 0.]
[0. 0.]]

b) La fonction ones
• La fonction np.ones() permet de créer une matrice remplie de 1.

b=np.ones((1,4))
print(b) [[1. 1. 1. 1.]]

c) La fonction eye
• La fonction np.eye() permet de créer une matrice identité.

c=np.eye(3)
print(c) [[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]

Programmation Python 28
ISAMM 1ère IM

d) La fonction diag
• La fonction np.diag() permet de créer une matrice diagonale.

d=np.diag((2,5,9))
print(d) [[2 0 0]
[0 5 0]
[0 0 9]]

.II. Opérations sur les matrices

1. Opérations arithmétiques d’une matrice et un scalaire


• Les opérations arithmétiques de base d’une matrice par un scalaire se font élément par élément.
Exemple :

mat = np.array ([[1,0,4,8],[9,3,2,2],[5,10,-2,-5]])


a=2
print(a+mat) [[ 3 2 6 10]
[11 5 4 4]
[ 7 12 0 -3]]
b=10
print(b/mat) [[10. inf 2.5 1.25 ]
[ 1.11111111 3.33333333 5. 5. ]
[ 2. 1. -5. -2. ]]
Warning (from warnings module):
File "<pyshell#42>", line 1
RuntimeWarning: divide by zero encountered
in true_divide
N.B. la valeur « inf » indique qu’une division par 0 a eu lieu, le logiciel affiche une notification
concernant cette opération (l’élément de la 1ere ligne, 2e colonne est 0).

2. Opérations arithmétiques entre deux matrices


• Cette opération se fait élément par élément.
NB : La somme de deux matrices ne peut se définir que si les deux matrices ont la même taille.

Programmation Python 29
ISAMM 1ère IM

Exemple :

mat = np.array ([[1,0,4,8],[9,3,2,2],[5,10,-2,-5]])


mat2 = np.array ([(0,2,2,4),(9,10,0,1),(-5,-3,0,0)])
print(mat+mat2) [[ 1 2 6 12]
[18 13 2 3]
[ 0 7 -2 -5]]

3. Opérateurs matriciels spécifiques


a) Transposée d’une matrice
• La transposée s’obtient avec la fonction transpose().
Exemple :

abc= np.transpose (mat2)


print(abc) [[ 0 9 -5]
[ 2 10 -3]
[ 2 0 0]
[ 4 1 0]]

b) Multiplication de deux matrices


Exemple :

print(np.dot(abc,mat2)) [[106 105 0 9]


[105 113 4 18]
[ 0 4 4 8]
[ 9 18 8 17]]

c) Déterminant d’une matrice


• Le déterminant ne peut être calculé que pour les matrices carrées.
• Afin de calculer le déterminant d’une matrice, on utilise la fonction np.linalg.det()

Programmation Python 30
ISAMM 1ère IM

Exemple :

m= np.array ([(3,0,1),(5,1,2),(7,9,9)])
print(m) [[3 0 1]
[5 1 2]
[7 9 9]]
print(np.linalg.det(m)) 10.999999999999991

d) Trace d’une matrice


• En algèbre linéaire, la trace d’une matrice carrée A est définie comme la somme de ses coefficients
diagonaux et souvent notée Tr(A).
• La trace d’une matrice est obtenue grâce à la fonction np.trace().

print(np.trace (m)) 13

e) Rang d’une matrice


• Le rang d’une matrice est obtenu grâce à la fonction np.linal. matrix_rank() du module
numpy.linalg.

print(np.linalg.matrix_rank(m)) 3

f) Inverse d’une matrice


• Cette opération ne peut être appliquée que sur les matrices carrées.

print(np.linalg.inv(m)) [[-0.81818182 0.81818182 -0.09090909]


[-2.81818182 1.81818182 -0.09090909]
[ 3.45454545 -2.45454545 0.27272727]]

g) Valeurs et vecteurs propres


• Les valeurs et les vecteurs propres ne peuvent être calculés que pour les matrices carrées.
• La fonction eigvals() du module numpy.linalg renvoie les valeurs propres de la matrice.
• Pour obtenir en plus les vecteurs propres associés, il faut employer la fonction eig().

print(np.linalg.eigvals(m)) [11.90132087+0.j 0.54933956+0.78898238j


0.54933956-0.78898238j]

Programmation Python 31
ISAMM 1ère IM

valProp,vectProp=np.linalg.eig(m)
print(valProp) [11.90132087+0.j 0.54933956+0.78898238j
0.54933956-0.78898238j]
print(vectProp) [
[ 0.10871566+0.j 0.2915995 +0.09387954j
0.2915995 -0.09387954j]
[ 0.22740402+0.j 0.51374177-0.14215688j
0.51374177+0.14215688j]
[ 0.96771293+0.j -0.78868066+0.j -
0.78868066-0.j ]
]

h) Décomposition en valeurs singulières


• La fonction svd() du module scipy.linalg permet de réaliser la décomposition en valeurs singulières
d’une matrice
• Il faut au préalable importer la fonction svd() du module scipy.linalg

from scipy.linalg import svd


u, sigma, v=svd(m)
u array([[-0.14806334, -0.55372062, -0.81943317],
[-0.29720437, -0.76535389, 0.57087914],
[-0.94326391, 0.32806539, -0.05124734]])
sigma array([15.33766885, 3.96524915, 0.18086846])
v array([[-0.55634656, -0.57287582, -0.60190681],
[-0.80486079, 0.55160081, 0.21894214],

i) Résolution d’un système d’équations linéaires


• Pour résoudre le système linéaire ax = b lorsque la matrice a est inversible, on peut employer la
fonction solve() du module numpy.linalg

Exemple : mx=b

m= np.array ([(3,0,1),(5,1,2),(7,9,9)])
b=array([1,9,5])
x= np.linalg.solve(m,b)
print(x) [6.09090909 13.09090909 -17.27272727]

Programmation Python 32
ISAMM 1ère IM

.III. Calcul par ligne ou par colonne


• En Python, les calculs matriciels peuvent être réalisés selon un axe :
o 0 : Les lignes ;
o 1 : Les colonnes.

Exemple :

print(mat) [[ 1 0 4 8]
[ 9 3 2 2]
[ 5 10 -2 -5]]
print(np.sum(mat)) 37
print(np.sum(mat,axis=0)) [15 13 4 5]
print(np.sum(mat,axis=1)) [13 16 8]

.IV. Modification d’une matrice


• Il est possible de modifier des lignes et/ou des colonnes d’une matrice.
• L’opération d’ajout ou d’insertion ne peut se faire qu’entre une matrice et une liste.

1. Ajout d’une ligne


• La fonction append() permet d’ajouter une ligne au début ou à la fin de la matrice.
Exemple :
• Ajouter la liste l en tant que nouvelle ligne (axis = 0) de la matrice mat :

l=np.array([[1,3,6,5]])
mat1 = np.append(mat,l,axis=0)
print(mat1) [[ 1 0 4 8]
[9 3 2 2]
[ 5 10 -2 -5]
[1 3 6 5]]

2. Ajout d’une colonne


• La fonction append() permet d’ajouter une colonne à la première ou à la dernière position.

Programmation Python 33
ISAMM 1ère IM

Exemple :
• Ajouter une colonne à la première position.

c=np.array([[0],[0],[0]])
mat1 = np.append(c,mat,axis=1)
print(mat1) [[ 0 1 0 4 8]
[ 0 9 3 2 2]
[ 0 5 10 -2 -5]]

3. Insertion dans une position bien déterminée


• Cette opération est réalisée grâce à la fonction insert().
• Il faut aussi mentionner l’emplacement de l’insertion.
Exemple :

mat = np.array ([(1,0,4,8),(9,3,2,2),(5,10,-2,-5)])


b = np.array([[4,6,4,6]])
print(np.insert(mat,1,b,axis=0)) [[ 1 0 4 8]
[4 6 4 6]
[9 3 2 2]
[ 5 10 -2 -5]]

4. Suppression
• La fonction np.delete() nécessite 3 paramètres :
o La matrice concernée ;
o Le numéro de la ligne ou de la colonne à supprimer ;
o Le code de l’élément à supprimer : suppression d’une ligne (axis = 0) ou d’une colonne (axis
= 1).
Exemple :
• Suppression de la 2e colonne :

m1=np.delete(mat,1,axis=1)
print(m1) [[ 1 4 8]
[ 9 2 2]
[ 5 -2 -5]]

Programmation Python 34
ISAMM 1ère IM

5. Modification de la taille d’une matrice


• Il est possible de modifier les dimensions d’une matrice existante grâce à la fonction resize().
• Le remplissage se fait ligne par ligne.
Exemple :

print(mat.size) #Nombre d’éléments de la 12


matrice
m1 = np.resize(mat,new_shape=(2,6))
print(m1) [[ 1 0 4 8 9 3]
[ 2 2 5 10 -2 -5]]
• Si on crée une matrice avec un nombre d’éléments plus élevé que celui de la matrice d’origine, le
principe de réplication est appliqué ; on fait au moins un deuxième parcours de la matrice d’origine
jusqu’à le remplissage de la nouvelle matrice.
Exemple :

m2 = np.resize(mat,new_shape=(3,9))
print(m2) [[ 1 0 4 8 9 3 2 2 5]
[10 -2 -5 1 0 4 8 9 3]
[ 2 2 5 10 -2 -5 1 0 4]]

.V. Outils mathématiques pour les matrices


• Le tableau ci-dessous nous donne quelques outils mathématiques fournis par Python pour mieux
exploiter les matrices, sachant que A et B sont deux matrices.

Fonction Rôle
A.max() Retourne le maximum global des coefficients
A.max(0) Retourne le maximum de chaque colonne sous forme de matrice ligne
A.max(1) Retourne le maximum de chaque ligne sous forme de matrice ligne
A.min() Retourne le minimum global des coefficients
A.min(0) Retourne le minimum de chaque colonne sous forme de matrice ligne
A.min(1) Retourne le minimum de chaque ligne sous forme de matrice ligne
A.sum() Retourne la somme totale des coefficients
A.sum(0) Retourne la somme de chaque colonne sous forme de matrice ligne
A.sum(1) Retourne la somme de chaque ligne sous forme de matrice ligne
A.prod() Retourne le produit total des coefficients
A.prod(0) Retourne le produit de chaque colonne sous forme de matrice ligne

Programmation Python 35
ISAMM 1ère IM

A.prod(1) Retourne le produit de chaque ligne sous forme de matrice ligne


A.mean() Retourne la moyenne totale des coefficients
A.mean(0) Retourne la moyenne de chaque colonne sous forme de matrice ligne
A.mean(1) Retourne la moyenne de chaque ligne sous forme de matrice ligne
A+B Retourne la matrice somme
t*A Retourne la matrice multipliée
numpy.dot(A,B) Retourne la matrice produit
f(A) Retourne la matrice dont les coefficients sont les coefficients images de ceux
de A par f
A.transpose() Retourne la matrice transposée de A
A.conj() Retourne la matrice conjuguée de A
A.conj().transpose() Retourne la matrice adjointe de A
numpy.linalg.det(A) Retourne le déterminant de la matrice A
numpy.linalg.inv(A) Retourne la matrice inverse de la matrice A
numpy.linalg.solve(A,b) Retourne la matrice ligne (ou colonne) solution de Ax=b où b est une matrice
ligne (ou colonne)
numpy.linalg.eigvals(A) Retourne sous forme de matrice ligne les valeurs propres de A
numpy.linalg.eig(A) Retourne sous forme de tableau le vecteur colonne des valeurs propres de A et
la matrice des vecteurs propres de A

numpy.inner(x,y) Retourne la valeur du produit scalaire de x et y : deux matrices lignes


Tableau 3: Quelques fonctions mathématiques en Python appliquées sur les matrices

Programmation Python 36

Vous aimerez peut-être aussi