Académique Documents
Professionnel Documents
Culture Documents
Simulation numérique :
Présentation de la bibliothèque numpy
Manipulation des matrices
Dr. Ghabri Afef Année Universitaire : 2020-2021
Introduction
données (ex. recherche, extraction), pour les manipulations diverses (ex. tri),
3
Le tableau à deux dimensions: (bidimensionnel ou matrice)
Création d’une matrice via une saisie manuelle :
o importer le module « numpy » : np sera l’alias utilisé pour accéder aux routines
de la librairie « numpy ».
import numpy as np
#type de la structure
print(type(a)) #<class ‘numpy.ndarray’>
#type des données
print(a.dtype) #float64
#nombre de dimensions
print(a.ndim) #2 (car c’est une matrice)
#nombre de lignes et col, shape renvoie un tuple
print(a.shape) #(3,2) 3 lignes et 2 colonnes
#nombre totale de valeurs
print(a.size) #6, nb.lignes x nb.colonnes 4
Le tableau à deux dimensions: (bidimensionnel ou matrice)
Typage des données :
b=np.ones((4,4),float)+np.eye(4,4)
print (b)
[[ 2. 1. 1. 1.]
[ 1. 2. 1. 1.]
[ 1. 1. 2. 1.]
[ 1. 1. 1. 2.]]
np.reshape(b,16) #array([ 2., 1., 1., 1., 1., 2., 1., 1., 1., 1., 2., 1., 1., 1., 1., 2.])
np.reshape(b,(2,8))
b.flatten() #array([ 2., 1., 1., 1., 1., 2., 1., 1., 1., 1., 2., 1., 1., 1., 1., 2.]) 7
Le tableau à deux dimensions: (bidimensionnel ou matrice)
Numpy permet d’assembler les vecteurs et les matrices, de les concaténer. Par défaut
l’assemblage se fait selon la 1ère dimension (les lignes, donc assemblage vertical).
L’option axis=1 assemble “horizontalement”.
>>> a=np.arange(4).reshape(2,2)
>>> b=4+np.arange(4).reshape(2,2)
>>> b
array([[4, 5],
[6, 7]])
>>> np.concatenate((a,b)) # np.concatenate((a,b),axis=0)
array([[0, 1],
[2, 3],
[4, 5],
[6, 7]])
>>> np.concatenate((a,b),axis=1)
array([[0, 1, 4, 5],
[2, 3, 6, 7]])
8
Le tableau à deux dimensions: (bidimensionnel ou matrice)
Redimensionnement
#matrice de valeurs
a= a = np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]])
Accoler le vecteur b en tant #ajouter une ligne –concaténation
que nouvelle ligne (axis = 0) b = np.array([[4.1,2.6]])
de la matrice a c = np.append(a,b,axis=0)
print(c)
#recherche indice de valeur max des lignes (axis = 0)pour chaque colonne
print(np.argmax(v,axis=0)) #[1 2]
#la relation entre les valeurs d'une même ligne est perdue !!!
print(np.sort(v,axis=0))
print(np.argsort(v,axis=0))
13
Stratégies pour parcourir une matrice
Parcours d’une matrice : boucles indicées -- v=
Avec les indices, nous pouvons accéder aux valeurs de la matrice (ligne par
ligne ou colonne par colonne).
#boucles indicées
s = 0.0
for i in range(0,v.shape[0]):
for j in range(0,v.shape[1]):
print(v[i,j])
s = s + v[i,j]
print("Somme = ",s)
14
Stratégies pour parcourir une matrice
Parcours d’une matrice : les itérateurs -- v=
Avec les itérateurs, nous pouvons accéder aux valeurs de la matrice sans
avoir à recourir aux indices (ligne par ligne, colonne par colonne)
#itérateur - accès ligne par ligne
s = 0.0
for x in np.nditer(v):
print(x)
s=s+x
print("Somme = ",s)
print(np.cumsum(v,axis=0))
#matrice de corrélation
m = np.corrcoef(v,rowvar=0)
print(m)
16
Calcul sur les matrices
Fonctions matricielles et algèbre linéaire:
x= y=
#transposition
print(np.transpose(x))
#multiplication
print(np.dot(x,y))
#déterminant
print(np.linalg.det(y)) # 4.21
#inversion
print(np.linalg.inv(y))
#résolution d'équation Y.a = z
z = np.array([1.7,1.0])
print(np.linalg.solve(y,z)) # [0.8195 -0.0261]
#vérification / On peut faire a = Y-1.z
print(np.dot(np.linalg.inv(y),z)) # [0.8195 -0.0261]
#matrice symétrique avec XTX
s = np.dot(np.transpose(x),x)
print(s)
#val. et vec. propres d'une matrice symétrique
print(np.linalg.eigh(s))
17
Calcul sur les matrices
print(np.linalg.eig(s))
#les valeurs propres de la matrice s
print(np.linalg.eigvals(s))
18
Sous-module random de numpy
Le sous-module random de numpy permet d'obtenir des nombres aléatoires,
random.rand pour générer des nombres aléatoires de loi uniforme U(0,1), random.randn
pour la loi normale centrée réduite (N(0,1)) et random.randint pour une loi uniforme sur un
intervalle d'entiers.
>>> random.randint(0,9,80) # loi uniforme sur les entiers de [0,9[ (donc [0,8])
array([4, 2, 5, 4, 5, 2, 8, 8, 1, 7, 0, 1, 1, 5, 3, 7, 5, 2, 3, 2, 6, 5, 3, 2, 1, 2, 6, 8, 0, 1, 4,
5, 0, 2, 6, 7, 5, 6, 6, 3, 5, 5, 6, 8, 0, 4, 2, 6, 4, 3, 8, 2, 2, 8, 3, 8, 8, 3, 5, 2, 0, 4, 2, 6, 2,
6, 4, 4, 5, 3, 1, 0, 5, 7, 3, 4, 4, 0, 2, 8])
22