[go: up one dir, main page]

0% ont trouvé ce document utile (0 vote)
98 vues11 pages

Les Matrices Avec Numpy - Python 2

Le document décrit les fonctionnalités de base de numpy pour la manipulation de matrices, notamment la création, l'accès aux éléments, l'extraction et les opérations sur les matrices.

Transféré par

Moussa MK
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
98 vues11 pages

Les Matrices Avec Numpy - Python 2

Le document décrit les fonctionnalités de base de numpy pour la manipulation de matrices, notamment la création, l'accès aux éléments, l'extraction et les opérations sur les matrices.

Transféré par

Moussa MK
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 11

28/10/2022

Manipulation des matrices avec numpy


Création, accès, extraction et calcul

Dr Riadh BOUSLIMI

Numpy ?

• Numpy est un package pour Python spécialisé dans la manipulation des


tableaux (array), pour nous essentiellement les vecteurs et les matrices
• Les tableaux « numpy » ne gère que les objets de même type
• Le package propose un grand nombre de routines pour un accès rapide
aux données (ex. recherche, extraction), pour les manipulations diverses
(ex. tri), pour les calculs (ex. calcul statistique)
• Les tableaux « numpy » sont plus performants (rapidité, gestion de la
volumétrie) que les collections usuelles de Python
•Les tableaux « numpy » sont sous-jacents à de nombreux packages
dédiés au calcul scientifique sous Python.
• Une matrice est un tableau (array) à 2 dimensions

Il n’est pas possible de tout aborder dans ce support. Pour aller plus loin, voir
absolument le manuel de référence (utilisé pour préparer ce diaporama).
http://docs.scipy.org/doc/numpy/reference/index.html

2
28/10/2022

Création à la volée, génération d’une séquence, chargement à partir d’un fichier

CRÉATION D’UNE MATRICE

Création via une saisie manuelle

Préalable important : np sera l’alias utilisé pour accéder


import numpy as np aux routines de la librairie « numpy ».
importer le module
« numpy »

Création manuelle à partir a = np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]]) Noter le rôle des [ ] et


[ ] pour délimiter les
d’un ensemble de valeurs
portions de la matrice
1.2

2.5
#type de la structure
 3.2
print(type(a)) #<class ‘numpy.ndarray’>

1 #type des données
print(a.dtype) #float64
#nombre de dimensions
Informations sur la
print(a.ndim) #2 (car c’est une matrice)
structure #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

4
28/10/2022

Typage des données

Affichage d’une matrice #print de l’ensemble


dans la console (IPython) print(a)

#création et typage implicite


a = np.array([[1,2],[4,7]])
Le typage des valeurs print(a.dtype) #int32
peut être implicite ou
#création et typage explicite – préférable !
explicite
a = np.array([[1,2],[4,7]],dtype=float)
print(a.dtype) #float64

Tout comme pour les vecteurs, la création d’une matrice


d’objets complexes (autres que les types de base) est possible

Création d’une matrice à partir d’une séquence de valeurs


arange() génère une séquencede valeurs, 0 à 9.
#création à partir d'une séquence reshape() se charge de les réorganiseren matrice
#attention les dim. doivent être compatibles 2 lignes et 5 colonnes.
a = np.arange(0,10).reshape(2,5)
print(a)

#un vecteur peut être converti en matrice


a = np.array([2.1,3.4,6.7,8.1,3.5,7.2])
print(a.shape) # (6,)
#redim. en 3 lignes x 2 col.
b = a.reshape(3,2)
print(b.shape) # (3, 2)
print(b)

#matrices de valeurs identiques


#ex. pour une initialisation
a = np.zeros(shape=(2,4))
print(a)

#plus généralement
a = np.full(shape=(2,4),fill_value=0.1)
print(a)

6
28/10/2022

Chargement à partir d’un fichier - Conversions

Les données peuvent être Remarque : si besoin, modifier le répertoire par défaut avec la
stockées dans un fichier fonction chdir() du module os (qu’il faut importer au préalable)
texte (loadtxt pour charger,
savetxt pour sauver) #charger à partir d'un fichier, typage explicite
#séparateur de colonne = tabulation « \t »
a = np.loadtxt("matrice.txt",delimiter="\t",dtype=float)
print(a)

La première ligne doit être


ignorée dans ce fichier, d’où le
symbole # en début de 1ère ligne.

#liste de valeurs
Conversion d’une lst = [1.2,3.1,4.5,6.3]
collection (type standard print(type(lst)) # <class ‘list’>
Python) en type array de #conversion à partir d'une liste : 2 étapes asarray() et reshape()
« numpy » a = np.asarray(lst,dtype=float).reshape(2,2)
print(a)

Redimensionnement
#matrice de valeurs
a= a = np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]])

#ajouter une ligne – marche pour la concaténation de matrices


Accoler le vecteur b en tant que
nouvelle ligne (axis = 0) de la b = np.array([[4.1,2.6]])
c = np.append(a,b,axis=0)
matrice a
print(c)

Accoler le vecteur d en tant que #ajouter une colonne


nouvelle colonne (axis = 1) de la d = np.array([[7.8],[6.1],[5.4]])
matrice a print(np.append(a,d,axis=1))

Insertion de b en tant que nouvelle #insertion


ligne (axis = 0) à la position n°1 print(np.insert(a,1,b,axis=0))

Suppression de la ligne (axis = 0) #suppression


via son indice (n°1) print(np.delete(a,1,axis=0))

#modifier la dimension d'une matrice existante


#parcourt les données lignes par ligne
Redimensionnement
h = np.resize(a,new_shape=(2,3))
d’une matrice
print(h)

8
28/10/2022

Accéder aux valeurs via des indices ou des conditions


EXTRACTION DES VALEURS

Accès indicé – Plages d’indices


v = np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]])
#affichage de la structure dans son ensemble
print(v) v=
#accès indicé - première valeur
print(v[0,0]) # 1.2
#dernière valeur – noter l’utilisation de shape (qui est un tuple)
print(v[v.shape[0]-1,v.shape[1]-1]) # 4.3
#autre solution pour affichage de toutes les valeurs, noter le rôle des :
print(v[:,:])
Remarques :
#plage d'indices contigus : lignes 0 à 1 (2 non inclus), toutes les colonnes (1)Mis à part les
print(v[0:2,:])
singletons, les matrices
#extrêmes, début to 2 (non-inclus) générées sont de type
print(v[:2,:])
numpy.ndarray
#extrêmes, lignes 1 à dernière (2)Toutes comme pour
print(v[1:,:])
les vecteurs, il est
#indice négatif – dernière ligne et toutes les colonnes possible d’utiliser un
print(v[-1,:]) vecteur d’indices non
#indices négatifs – deux dernières lignes et toutes les colonnes contigus.
print(v[-2:,:])

10

10
28/10/2022

Accès par conditions – Indiçage booléen

v=

#indiçage par vecteur de booléens


#si b trop court, tout le reste est considéré False
#si b trop long, erreur
b = np.array([True,False,True],dtype=bool)
print(v[b,:])

#exemple illustratif : extraire la lignes dont la somme est la plus petite

#calculer la somme des colonnes pour chaque ligne


s = np.sum(v,axis=1)
print(s) # [ 3.7 5. 5.4 ]

#repérer les lignes dont la somme est égale au minimum


#il est possible qu’il y en ait plusieurs
b = (s == np.min(s))
print(b) # [ True False False]
Remarquer la configuration des
#application du filtre booléen
crochets [ ] : on a une matrice à
print(v[b,:]) 1 ligne et 2 colonnes.
11

11

Tri et recherche
v=
#recherche valeur max des lignes (axis = 0) pour chaque colonne
print(np.max(v,axis=0)) # [ 3.2 4.3 ] -- décryptage : 3.2 est la max des lignes
pour la colonne 0, 4.3 est la max des lignes pour la colonne 1

#recherche valeur max des colonnes (axis = 1) pour chaque ligne


print(np.max(v,axis=1)) # [ 2.5 3.2 4.3]

#recherche indice de valeur max des lignes (axis = 0)pour chaque colonne
print(np.argmax(v,axis=0)) # [ 1 2 ]

#tri des lignes (axis = 0) pour chaque colonne


#la relation entre les valeurs d'une même ligne est perdue !!!
print(np.sort(v,axis=0))

#récupération des indices triés


print(np.argsort(v,axis=0))

12

12
28/10/2022

Stratégies pour parcourir une matrice

ITÉRATIONS

13

13

Parcours d’une matrice : boucle indicées

Avec les indices, nous pouvons accéder aux valeurs de la matrice v=


comme bon nous semble (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

14
28/10/2022

Parcours d’une matrice : les itérateurs

Avec les itérateurs, nous pouvons accéder aux valeurs de la


matrice sans avoir à recourir aux indices (ligne par ligne, v=
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)

#itérateur - accès colonne par colonne


#"F" pour " Fortran order "
s = 0.0
for x in np.nditer(v,order="F"):
print(x)
s = s +x
print("Somme = ",s)

Les itérateurs de NumPy sont sophistiqués et puissants, voir :


http://docs.scipy.org/doc/numpy/reference/arrays.nditer.html
15

15

Calculs statistiques

CALCULS SUR LES MATRICES

16

16
28/10/2022

Calculs (statistiques) récapitulatifs


Principe : les calculs
sont réalisés selon une v=
certaine organisation
des données (axis = #moyenne par colonne
None : toutes les print(np.mean(v,axis=0)) # [1.833 2.867]
valeurs prises
globalement ; axis = 0 #moyenne par ligne
: traitement par print(np.mean(v,axis=1)) # [1.85 2.5 2.7]
colonne ; axis = 1 :
traitement par ligne) #somme cumulée des valeurs pour chaque colonne
print(np.cumsum(v,axis=0))

#matrice de corrélation
#rowvar = 0 pour indiquer que les variables
#sont organisés en colonnes
m = np.corrcoef(v,rowvar=0)
print(m)

La librairie n’est pas très fournie, nous aurons besoin de SciPy (et autres)
17

17

Calcul le long d’un axe


Principe : A la manière
de la fonction apply() v=
de R, nous pouvons
définir des calculs le #moyenne par colonne : [1.833 2.867]
long d’un axe d’une print(np.apply_along_axis(func1d=np.mean,axis=0,arr=v))
matrice (0 par
colonne, 1 par ligne). #une fonction callback – étendue standardisée
Chaque colonne def etendue_std(x):
(ligne) est passée en res = (np.max(x) - np.min(x))/np.std(x)
paramètre à une return res
fonction callback.
#étendue normalisée par colonne : [2.171 2.374]
print(np.apply_along_axis(func1d=etendue_std,axis=0,arr=v))

#fonction peut-être définie à la volée avec lambda


print(np.apply_along_axis(func1d=lambda x:(np.max(x)-np.min(x))/np.std(x),axis=0,arr=v))

#cas où la fonction callback renvoie un vecteur


[[-0.65 -0.35] #nous obtenons une matrice. Ex. centrage-réduction
[ 1.41 -1.01]
print(np.apply_along_axis(func1d=lambda x:(x-np.mean(x))/np.std(x),axis=0,arr=v))
[-0.76 1.36]]

18

18
28/10/2022

NumPy donne sa pleine mesure pour le calcul matriciel

CALCUL MATRICIEL

19

19

Fonctions matricielles (1/2)

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))

20

20
28/10/2022

Fonctions matricielles (2/2)

x= y=

Solution de #résolution d'équation


Y.a = z
z = np.array([1.7,1.0])
print(np.linalg.solve(y,z)) # [0.8195 -0.0261]

On peut faire #vérification


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))

21

21

Références

Site de Python
Welcome to Python - https://www.python.org/
Python 3.4.3 documentation - https://docs.python.org/3/index.html

Portail Python
Page Python de Developpez.com

Quelques cours en ligne


P. Fuchs, P. Poulain, « Cours de Python » sur Developpez.com
G. Swinnen, « Apprendre à programmer avec Python » sur Developpez.com
« Python », Cours interactif sur Codecademy

POLLS (KDnuggets)
Data Mining / Analytics Tools Used
Python, 4ème en 2015
What languages you used for data mining / data science?
Python, 3ème en 2014 (derrière R et SAS)

22

22

Vous aimerez peut-être aussi