Académique Documents
Professionnel Documents
Culture Documents
ECS1
TP 5
Tableaux et matrices
Nous venons de voir en cours ce qu’est une matrice. Sous Python, il est assez courant et facile de
travailler avec des tableaux ou des matrices. Il peut s’agir de matrices de variables de tout type.
L’objectif de ce TP est de vous faire découvrir comment manipuler les matrices sous Python. Je
vous conseille de vous faire une fiche de tout ce que vous avez appris au cours de ce TP pour être
capable de réutiliser les commandes facilement.
Le programme d’ECG préconise d’utiliser la librairie numpy pour travailler avec des tableaux.
On les créera alors avec la commande np.array. Tapez les commandes suivantes pour comprendre
comment créer une matrice sous Python :
import numpy as np
A=np.array([1, 2, 3])
B=np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
C=np.array([[1], [2], [3]])
print(’A=’, A, ’B=’, B, ’C=’,C)
print(type(A))
On retiendra donc, que pour créer une matrice, il faudra utiliser la syntaxe
np.array([[L1], [L2], ..., [Ln]]) où les différentes éléments de chaque ligne Li seront séparés
par des virgules.
On notera également que ces tableaux ou matrices forment un nouveau type de variables (dernière
ligne du programme précédent).
3. Matrices particulières
Lorsque l’on travaille avec des matrices de taille élevée, il peut être bien pénible de rentrer tous
les coefficients à la main. Dans certains cas particuliers, on peut définir les matrices plus rapidement.
Voici la listes des matrices usuelles au programme :
1
L’instruction A = np.ones([2,3]) affecte à A la matrice de taille (2, 3) dont tous les coeffi-
cients sont des 1.
L’instruction A= np.eye(2,3) affecte à A la matrice suivante :
1 0 0
0 1 0
On remarque ici que le tableau s’arrête juste avant le nombre donné pour l’arrivée.
Le pas par défaut est 1, ainsi, l’instruction A = np.arange(5,10) affecte à A la matrice
5 6 7 8 9 .
Enfin, la valeur initiale par défaut est 0, donc l’instruction A= np.arange(5) affecte à A la
matrice
0 1 2 3 4 .
Exercice 2. Créer le tableau des entiers pairs entre 0 et 100 rangés par ordre croissant , puis celui
des mêmes entiers par ordre décroissant ([100; 98; 96; . . . ; 0]).
2
import numpy as np
def diag(n):
A = np.zeros((n,n))
for i in range(n):
A[i,i] = i
return A
Exercice 4. Entrer une matrice C de taille (3, 4) de votre choix. Remplacer la deuxième ligne de la
matrice C par une ligne de 1, puis remplacer la deuxième colonne de la matrice C par la première
colonne de la matrice C.
a = [[3,1],[1,11]]
b = a[0]
b[0] = 2
print(a)
En fait la deuxième instruction ne crée pas une variable b mais une vue sur la première ligne de a.
Une modification de b agit donc aussi sur a. Cela peut être une source d’erreurs, pas toujours évidentes
à détecter... Pour contourner cette difficulté on utilisera une copie via la méthode copy :
a = [[3,1],[1,11]]
b = a[0].copy()
b[0] = 2
print(a)
Toutes les opérations usuelles (i.e. +,−, ∗, / et ∗∗) s’entendent coefficient par coefficient (ce ne sont
donc pas, pour les 3 dernières, des opérations mathématiques classiques). De même les opérations de
comparaison (i.e. ==, >, <, <=, >= et ! =) s’entendent coefficient par coefficient et renvoient donc
une matrice.
print(np.eye(3)>0)
print(np.array([[1], [2], [3]])*np.ones([3,1]))
3
import numpy as np
A = np.ones((3,2))
B = 2*np.ones((1,2))
A[0] = B
A[1] = 2*A[1]
A[2] =A[2]+1
print(A)
A retenir : On constate donc que Python comprend l’instruction A+1 (qui n’est mathématiquement
pas homogène !) de la manière suivante : ”ajouter 1 à tous les coefficients de A”. C’est la même chose
pour la division par un nombre. Testez le programme suivante pour bien comprendre :
import numpy as np
A=np.ones([2,2])
B=A+3
C=B/4
print(A,B,C)
Le produit matriciel peut être effectué à l’aide de la commande np.dot. La syntaxe pour effectuer
le produit de 2 matrices A et B est M=np.dot(A,B).
Exercice 8. Ecrire une fonction puissance(A,n) qui permet de calculer la puissance nème de la
matrice carrée A (pour n ≥ 1).
5. Fonctions et matrices
import numpy as np
m1 = np.array([[1,np.e],[2,3]])
m = np.log(m1)
4
np.cumsum(A) qui renvoie une matrice de la même taille que A dont chaque coefficient est la
somme cumulées des coefficients de A (lue en ligne).
np.mean(A) qui renvoie la moyenne des coefficients de A.
np.max(A) qui renvoie le maximum des coefficients de A.
np.min(A) qui renvoie le minimum des coefficients de A.
Testez ces fonctions avec une matrice A de votre choix pour être certain d’avoir tout bien compris.
Ces fonctions s’appliquent, par défaut, à toute la matrice. Elles peuvent aussi, (sauf pour les deux
premières) s’appliquer ligne par ligne (on utilisera alors l’instruction np.blabla(m,1)) ou colonne par
colonne (on utilisera alors l’instruction np.blabla(m,0)).
a=np.array([[3,1,0],[5,11,-1]])
print(np.mean(a,0))
print(np.cumsum(a,1))
A=np.ones([2,2])
B=np.eye(2,2)
print(A==B)
print(np.sum.(A==B))
A retenir : Si on utilise la commande np.sum avec une matrice de booléens, Python transforme,
pour son calcul, les False en 0 et les True en 1. Il est aussi possible de transformer une matrice de
booléen en une matrice de 1 et de 0 en utilisant la commande A.astype(int).
Exercice 10. Écrire une fonction egalite(A,B) qui renvoie True si deux matrices A et B sont égales
et False sinon.
Enfin, il existe une librairie numpy.linalg plus spécifiquement dédiée à l’algèbre linéaire. On
l’importe via l’instruction import numpy.linalg as al. Les fonctions au programme sont, pour une
matrice A :
al.inv(A) qui calcule l’inverse de A si elle existe et renvoie un message d’erreur sinon.
al.rank(A) qui calcule le rang de A.
al.matrix_power(A, n) qui calcule la puissance n-ème de A (si A est une matrice carrée !).
Testez ces commandes sur une matrice A de votre choix pour être certain de bien tout comprendre.
Exercice 11. Comment utiliser Python pour résoudre le système linéaire suivant ?
2x + 3y + 5z=8
S= 4x + y + 2z =3
x + y + 5z =1
5
5. A vous de jouer !
Exercice 12. 1. Écrire une fonction matprod qui effectue le produit de deux matrices lorsque
c’est possible et vous signale l’erreur dans le cas contraire.
2. Écrire une fonction mattrace qui calcule la trace d’une matrice carrée, c’est-à-dire la somme
des coefficients diagonaux de cette matrice.
3. Écrire une fonction danstab qui teste si un élément x appartient à une matrice A.
1 0 1
Exercice 13. Soit A la matrice définie par : A = 0 1 0. Calculer An pour tout n ∈ N.
0 0 1
n
On pourra conjecturer la forme de A à l’aide de Python.
def =mystere(n) :
P=zeros([n,n]);
for i in range(1, n+1):
P[i,i]=1
P[i,1]=1
for i in range(3, n+1):
for j in range(2, n+1):
P[i,j]=P[i-1,j-1]+P[i-1,j]
return P