Tableaux et calcul matriciel avec
le module numpy
Dr N. BAME
Dr N. BAME 1
Introduction
• Les données qui sont utilisées pour les analyses peuvent venir de sources très
variées, mais nous pouvons toujours les considérer comme des tableaux.
• NumPy (Numerical Python) est un module Python pour stocker et effectuer des
opérations sur les données.
• Les tableaux Numpy sont comme les listes en Python, mais Numpy permet de
rendre les opérations beaucoup plus efficaces, surtout sur les tableaux de large
taille.
• Les tableaux Numpy sont au cœur de presque tout l'écosystème de data science
en Python.
• Commencer toujours par importer Numpy.
import numpy as np
Dr N. BAME 2
Création de tableaux avec Numpy
• Contrairement aux listes en Python, tous les éléments d’un tableau Numpy
doivent être du même type.
• On peut aussi spécifier le type manuellement.
• On peut créer des tableaux de différentes façons dans Numpy.
Depuis une liste Python
# Tableau d'entiers:
np.array([1, 4, 2, 5, 3])
• S’il y a des données de types différents, Numpy essaiera de les convertir toutes au type le
plus général.
• les entiers (int) seront convertis en nombres à virgule flottante ( float ) :
np.array( [3.14, 4, 2, 3] )
array([ 3.14, 4. , 2. , 3. ])
• Nous pouvons aussi manuellement spécifier un type :
• np.array([1, 2, 3, 4], dtype='float32') Dr N. BAME 3
Tableaux : numpy.array()
• Les tableaux (array) peuvent être créés avec numpy.array()
Tableaux monodimensionnels (1D)
• Pour créer un tableau 1D, il suffit de passer une liste de nombres en argument de numpy.array()
a = np.array([4,7,9] )
Tableaux bidimensionnels (2D)
• Contrairement aux listes Python, les tableaux Numpy peuvent être explicitement multi-
dimensionnels.
• Le tableau multi-dimensionnel est reconnu par NumPy.
• Mais en Python natif, on représente un tableau multidimensionnel par une liste de listes, car au final,
• un tableau à 2 entrées (lignes et colonnes), ce n'est rien d'autre qu'une liste de lignes, et une ligne est une liste de
nombres
• Pour créer un tableau 2D, il faut transmettre à numpy.array() une liste de listes grâce à des crochets
imbriqués.
a = np.array([[1, 2, 3], [4, 5, 6]])
Dr N. BAME 4
Quelques fonctions de base
• La fonction numpy.size() renvoie le nombre d’éléments du tableau.
a = np.array([2,5,6,8])
np.size(a)
4
• La fonction numpy.shape() (forme, en anglais) renvoie la taille du tableau.
b = np.array([[1, 2, 3], [4, 5, 6]])
np.shape(b)
(2, 3)
Dr N. BAME 5
Quelques fonctions de base m = np.arange(3, 15, 2)
array([ 3, 5, 7, 9, 11, 13])
La fonction numpy.arange()
type(m)
numpy.ndarray
• Sur un modèle similaire à la fonction range() , la fonction arange() permet de
construire un array à une dimension de manière simple.
• Noter la différence entre numpy.arange() et range()
• numpy.arange() retourne un objet de type numpy.ndarray.
• range() retourne un objet de type range.
• numpy.arange() accepte des arguments qui ne sont pas entiers.
• numpy.linspace() permet d’obtenir un tableau 1D allant d’une valeur de départ à une
valeur de fin avec un nombre donné d’éléments np.arange(0, 11*np.pi, np.pi)
np.linspace(3, 9, 10)
Dr N. BAME 6
Construction automatique de matrices (1)
• Il peut être parfois pénible de construire une
matrice (array à 2D) à l’aide d’une liste de listes.
• NumPy possède quelques fonctions pratiques pour
initialiser des matrices.
• Par exemple, Les fonctions zeros() et ones()
construisent des objets array contenant des 0 ou des 1.
• On leur passe en argument un tuple indiquant les
dimensions voulues.
• Par défaut, les fonctions zeros() et ones() génèrent
des floats, mais vous pouvez demander des entiers np. zeros ((2 ,3) , int )
en passant le type (par exemple int , float , etc.) en
second argument
• Enfin, si vous voulez construire une matrice avec
autre chose que des 0 ou des 1, vous avez à votre
disposition la fonction full() :
Dr N. BAME 7
Construction automatique de matrices (2)
• Tableaux de 0 : numpy.zeros()
• Tableaux de 1 : numpy.ones()
identity :Toujours pour une matrice carré
• Matrice identité - numpy.eye() ou numpy.identity()
Dr N. BAME 8
Accès aux éléments d’un tableau
• Comme pour les listes, les indices des éléments commencent à zéro.
• a[0, 1] : donne l'élément sur la ligne 0 et la colonne 1.
• a[0][1] : marche aussi, mais est moins efficace car crée d'abord la sous array a[0]
• a[-1,-1] : dernier élément.
• a[0] : première ligne, donc ici array([1, 2, 3]). a[0,1] a[1,2]
2 6
• a[:,0] : première colonne, donc ici array([1, 4]).
• a[0:2,0:2] : sous-array 2d des 2 premières lignes et 2 premières colonne
• on peut utiliser des arrays pour récupérer certains éléments :
• a[numpy.array([0, 1, 0]) , numpy.array([0, 2, 2]) ] donne array([1, 6, 3]).
• a[[0, 1, 0], [0, 2, 2]] marche aussi.
Dr N. BAME 9
Redimensionnement par reshape
• La principale méthode pour modifier la taille d’un tableau est reshape .
• Le redimensionnement d’un tableau est quand même soumis à la contrainte que
le nombre total d’éléments doit rester constant.
• On pourra ainsi passer (dans les deux sens) d’un vecteur de taille n à une matrice de taille
(p, q) ou à une matrice de taille (r, s) à condition que n = p x q = r x s.
• Si a est un tableau numpy, l’expression a.reshape(n, p) renvoie une copie
redimensionnée
• le contenu de la variable initiale n’est donc pas affecté
Dr N. BAME 10
Exercice
1. Créer deux tableaux V1 et V2 contenant respectivement les éléments ci-dessous dans
le même ordre :
a) 15, 0, 5, 9, 7,2, -6, 50
b) 6, 8, 7, 7, 0, 4, 3
2. Créer un tableau V3 contenant les nombres multiple de 3 compris entre 51 et 75
(inclus)
3. Créer un vecteur V4 de 8 éléments compris entre 21 et 63 (inclus)
4. Afficher les 4 derniers éléments de V3
5. Afficher les éléments d’indices impairs de V3
6. Construire la matrice A suivante :
7. Construire une matrice Z5x4 dont les éléments sont nuls puis une matrice U4x5 de uns
8. Créer la matrice d’identité I d’ordre 5
9. Inverser le format de la matrice A
10. Afficher les 2 premières lignes de I
11
Opérations terme à terme
• Il est possible de réaliser un produit terme à terme grâce à l’opérateur *.
• Il faut dans ce cas que les deux tableaux aient la même taille
• De la même façon on peut utiliser les opérateurs +, -, /
Dr N. BAME 12
Suppressions de lignes, de colonnes
• suppriment respectivement la k-ième ligne et la k-ième colonne de a.
• L’argument axis=... est très souvent présent (de façon facultative) dans les fonctions du module numpy :
axis=0 signifie « selon l’indice de ligne » et axis=1 signifie « selon l’indice de colonne ».
• On peut également supprimer plusieurs colonnes (ou lignes) à la fois.
Dr N. BAME 13
Insertion de lignes, de colonnes (1)
• permettent d’insérer la valeur v respectivement avant la k-ième ligne ou avant la k-ième
colonne de a.
• Les expressions append(a, v, axis=0) et append(a, v, axis=1) permettent d’ajouter une
matrice-colonne C (respectivement une matrice V ) après la dernière ligne (respectivement
après la dernière colonne) de a.
• Il faut veiller à ce que la matrice ajoutée ait un format compatible avec celui de a.
Dr N. BAME 14
Insertion de lignes, de colonnes (2)
• En reprenant l’exemple de la matrice précédente a, on voit comment ajouter la
matrice identité à droite de la matrice a
• l’argument int permet de faire en sorte que le résultat soit encore à coefficients entiers.
Dr N. BAME 15
Opérations par blocs (1)
• concatenate permet d’accoler deux ou plusieurs tableaux (horizontalement
avec axis=1, verticalement avec axis=0).
• En cas de concaténation horizontale par exemple, toutes les colonnes doivent
avoir la même hauteur.
• Les différents tableaux à concaténer doivent être donnés sous la forme d’un
tuple :
Dr N. BAME 16
Opérations par blocs (2)
• On peut aussi utiliser les fonctions hstack (concaténation horizontale) et vstack
(concaténation verticale).
• Voici quelques exemples en reprenant la signification précédente des tableaux a, b, c :
• La fonction column_stack combine des vecteurs-lignes en les colonnes d’un
tableau.
• On voit ici la différence des résultats obtenus en utilisant hstack, vstack ou column_stack
sur un tuple de deux vecteurs lignes a et b.
Dr N. BAME 17
Exercice
• Soient les matrices A, B et C suivantes :
A= B= C=
• Calculer A+B au sens élément par élément
• Fusionner horizontalement A et B en Fh
• Fusionner verticalement B et C en Fv
Dr N. BAME 18
Matrices diagonales ou triangulaires (1)
• La fonction diag renvoie la diagonale d’une
matrice.
• Avec un deuxième argument (facultatif) k, on
obtient une sur-diagonale (si k > 0)
• ou une sous-diagonale (si k < 0).
Dr N. BAME 19
Matrices diagonales ou triangulaires (2)
• Inversement, la fonction diag, si elle est appliquée à un vecteur (ou à une liste,
ou à un tuple) renvoie la matrice diagonale formée sur les coefficients de ce
vecteur :
Dr N. BAME 20
Matrices diagonales ou triangulaires (3)
• La fonction tri forme une matrice dont les coefficients valent 1 le long et en-dessous d’une k-
ème parallèle à la diagonale, et 0 au-dessus.
• On peut préciser le « dtype » (c’est float par défaut) :
• Appliquée à un tableau numpy les fonctions tril (l pour low) et triu (u pour up) renvoie une
copie du tableau où tous les coefficients au-dessus ou en-dessous d’une certaine diagonale
ont été annulés
Dr N. BAME 21
Tableaux pseudo-aléatoires
• Les fonctions qui forment des tableaux pseudo-aléatoires sont présentes dans le sous-
module random du module numpy.
• random.rand renvoie un tableau de valeurs pseudo-aléatoires dans l’intervalle [0, 1]
(au sens de la distribution uniforme).
• Elle prend comme argument un entier n1 (respectivement une séquence n1 , n2 , . . .)
et renvoie un vecteur de longueur n1 (respectivement un tableau de format n1×n2×···)
• La fonction random.sample fait la même chose que random.rand mais l’argument est
un tuple.
Dr N. BAME 22
Tableaux pseudo-aléatoires
• La fonction random.choice renvoie un échantillon aléatoire de valeurs extraites
d’un tableau a.
Dr N. BAME 23
Exercice
1. Créer les matrices triangulaires supérieure puis inférieure obtenues à partir de
A
2. Extraire la diagonale principale de A
3. Extraire la première diagonale inférieure de A
4. Extraire la deuxième diagonale supérieure de A
5. Créer une matrice diagonale avec les valeurs suivantes : 9, 6, 3, 4, 7
6. Créer une matrice R0 4x3 de nombres aléatoires compris en 0 et 1
7. Créer une matrice R1 4x3 de nombres aléatoires compris en 4 et 20
8. Créer une matrice R2 4x3 de nombres alétoires avec comme valeurs possibles
sont 18, 15, 12, 13, 9, 5, 0,20 Dr N. BAME
24
Calculs statistiques (1)
• On dispose des fonctions mean (moyenne arithmétique), var (variance) et std (écart-type)
• Toutes ces fonctions s’appliquent à une matrice. On peut alors préciser un axe de calcul (axis=0
pour un calcul sur les lignes et axis=1 pour un calcul sur les colonnes). Si on ne précise pas cet
argument, le calcul est fait « à plat ».
Dr N. BAME 25
Calculs statistiques (2)
• median(a,[axis]) calcule la valeur médiane (ou les valeurs médianes suivant un
axe d’une matrice)
• percentile(a,n[,axis]) calcule le(s) n-ième(s) percentile(s), éventuellement selon
un axe dans le cas d’une matrice.
Dr N. BAME 26
Exercice
• Soit la matrice A
1. Calculer la somme, puis la moyenne des éléments de A
2. Calculer la médiane puis la variance par colonne
3. Calculer la moyenne, puis le maximum par ligne
Dr N. BAME 27
Calcul matriciel
• Produit matriciel - numpy.dot()
• La fonction numpy.dot() permet de réaliser le produit
matriciel.
• Transposé
• .T ou .transpose()
Dr N. BAME 28
Algèbre linéaire
• Déterminant - numpy.linalg.det()
• Inverse - numpy.linalg.inv()
Dr N. BAME 29
Résolution d’un système d’équations linéaires
Résolution d’un système d’équations linéaires - numpy.linalg.solve()
• Pour résoudre le système d’équations linéaires
• 3 * x0 + x1 = 9
• x0 + 2 * x1 = 8
• Pour vérifier que la solution est correcte :
Dr N. BAME 30
Exercice
1. Calculer le déterminant de la matrice A
2. Calculer le produit matriciel de B et C
B= C=
3. Résoudre les systèmes d’équation suivants
Dr N. BAME 31