Tutoriel Python: la librairie Numpy

Table des matières

Introduction

  1. Installation et import de la bibliothèque
  2. Tableaux

2.1. Créer un tableau

2.2. Matrices particulières

2.2.1. Matrice nulle

2.2.2. Matrice de 1

2.2.3. Matrice d’identité

2.3. Fonctions de base

2.3.1. Dimension d’un tableau

2.3.2. Forme d’un tableau

2.3.3. Type de données d’un tableau

2.3.4. La fonction arange()

  1. Opérations

3.1. Opérations arithmétiques

3.2. Comparaisons

3.3. Agrégations

  1. Manipulation des tableaux NumPy
  2. Exercices
  3. Correction

Conclusion

Introduction

NumPy (Numerical Python) est la première bibliothèque à connaitre si vous utilisez Python pour des domaines qui touchent les mathématiques.

NumPy est une extension fondamentale de Python qui permet de faire du calcul scientifique en Python.

1. Installation et import de la bibliothèque

En utilisant la distribution Anaconda, on installe NumPy ainsi :

  • Code :

conda install nump

On importe la bibliothèque NumPy :

import numpy as np

2. Tableaux

2.1. Créer un tableau

Pour créer un tableau d’une seule dimension, il suffit de faire appel à la fonction array().

  • Code :

a = np.array([1,2,3])
print(a)

  • Résultat de l’exécution :

Exemple

Affichons un tableau de deux dimensions.

  • Code :

a = np.array([[1,2,3],
[4,5,6]])
print(a)

  • Résultat de l’exécution :

Remarque :

Le principe de dimension est simple. Pour un tableau d’une seule dimension on a une liste, pour deux dimensions on a une liste de listes, pour trois dimensions on a une liste de listes de listes. Pour n dimensions on a une liste de n-1 listes imbriquées.

2.2. Matrices particulières

2.2.1. Matrice nulle

La première fonction qu’on va voir est celle qui permet de créer une matrice nulle, c’est-à-dire une matrice ne contenant que des zéros.

Syntaxe :

Où n est le nombre de ligne et p est le nombre de colonne.

Exemple :

Créons une matrice nulle de 3 lignes et de 4 colonnes.

  • Code :

np.zeros((3,4))

  • Résultat de l’exécution :

2.2.2. Matrice de 1

Si on peut créer une matrice nulle alors on peut en effet créer une matrice ne contenant que des « 1 ».

Ceci est réalisable en utilisant la fonction ones().

Syntaxe :

Exemple :

De la même manière, on va créer un tableau de 3 lignes et 4 colonnes.

  • Code :

np.ones((3,4))

  • Résultat de l’exécution :

Remarque :

Soit pour la fonction zeros() ou la fonction ones() remarquons qu’on utilise deux paires de parenthèses.

2.2.3. Matrice d’identité

Pour avoir la matrice d’identité, c’est-à-dire une matrice dont tous les éléments sont des zéros sauf pour la diagonale qui contient des uns, on fait appel à la fonction eye(n).

Cette fonction renvoie un tableau carré de deux dimensions de taille n.

Exemple :

Application simple de la fonction eye():

  • Code :

a = np.eye(4)
print(a)

  • Résultat de l’exécution:

2.3. Fonctions de base 

2.3.1. Dimension d’un tableau

En manipulant les tableaux NumPy on aimera savoir des informations de base sur ces derniers.

Pour connaitre la dimension du tableau, on fait appel à la fonction ndim().

Exemple :

  • Code :

a = np.array([[[1,2,3],
[4,5,6],
[7,8,9]]])
a.ndim

  • Résultat de l’exécution :

2.3.2. Forme d’un tableau

Pour connaitre la forme du tableau, on utilise la fonction shape().

Exemple :

Prenons l’exemple d’un tableau de 2 dimensions.

  • Code :

a = np.array([[1,2,3],
[4,5,6]])
a.shape

  • Résultat de l’exécution :

La fonction retourne le nombre de lignes, qui est dans ce cas 2, et le nombre de colonnes, dans ce cas 3. Maintenant prenons l’exemple d’un tableau de 3 dimensions :

  • Code :

a = np.array([[[1,2,3],
[4,5,6],
[7,8,9]]])
a.shape

  • Résultat de l’exécution:

La fonction shape affiche que le tableau contient une couche, 3 lignes et 3 colonnes.

2.3.3. Type de données d’un tableau

Pour connaitre le type des données contenu dans un tableau, on utilise la fonction dtype().

Exemple :

Appliquons la fonction dtype() sur l’exemple précédent.

  • Code :

a = np.array([[[1,2,3],
[4,5,6],
[7,8,9]]])
a.dtype

  • Résultat de l’exécution :

2.3.4. La fonction arange()

Tout d’abord la fonction arange() est similaire que la fonction range(). Celle-ci permet de créer un tableau d’une seule dimension contenant une suite de nombres. Cette fonction prend en paramètre le numéro de départ, le dernier nombre et le pas.

Exemple :

  • Code :

a = np.arange(1,10,2)
print(a)

  • Résultat de l’exécution:

On résulte d’un tableau d’une dimension de nombres impairs compris entre 1 et 10.

3. Opérations

3.1. Opérations arithmétiques

NumPy propose des fonctions natives plus adaptées aux opérations arithmétiques sur les tableaux.

  • Alors pour faire l’addition, on retrouve la fonction add().
  • Pour la soustraction, on fait appel à la fonctionsubtract().
  • Pour la multiplication, on a la fonctionmultiply().
  • Pour la division, vous l’avez peut-être deviné, on a la fonction divide().
  • Finalement, avec la fonction dot(), il est possible de faire le produit scalaire.

Exemple :

Dans cet exemple nous allons voir les opérations arithmétiques sur les tableaux  à travers les fonctions qu’on vient de mentionner.

  • Code :

a = np.array([[1,2,3],
[4,5,6]])
b = np.array([[7,8,9],
[10,11,12]])
print("l'addition des deux tableaux:\n", np.add(a,b))
print("la soustraction de b de a:\n ", np.subtract(b,a))
print("la multiplication des deux tableaux:\n ", np.multiply(a,b))
print("la division de b par a:\n" ,np.divide(b,a))

  • Résultat de l’exécution:

Exemple :

Produit scalaire.

  • Code :

a = np.array([1,2,3])
b = np.array([4,5,6])
a.dot(b)

  • Résultat de l’exécution:

Maintenant qu’on a vu les opérations mathématiques, on peut se demander si bibliothèque Numpy contient les fonctions mathématiques usuelles comme la fonction cosinus, sinus, exponentielle.., etc.

La réponse est oui, ces fonctions sont présentes dans la bibliothèque NumPy.

 Exemple :

  • Code :

a = np.array([[1,2,3],
[4,5,6]])
#exponentielle
print(np.exp(a))
#sinus
print(np.sin(a))
#cosinus
print(np.cos(a))
#tangente
print(np.tan(a))
#racine carée
print(np.sqrt(a))

  • Résultat de l’exécution:

3.2. Comparaisons

Afin de comparer les valeurs de deux tableaux sans faire d’itération, on utilise == (double signe égale).

Prenons un exemple simple :

  • Code :

a = np.array([1,2,3])
b = np.array([4,5,6])
a == b

  • Résultat de l’exécution:

Puisque les valeurs des deux tableaux sont différentes, on résulte de false pour chaque colonne.

On peut aussi utiliser :

DESCRIPTION

(a== b).all()

Renvoie True si toutes les valeurs des deux tableaux sont égales. Et renvoie False sinon.

(a==b).any()

Renvoie True si au moins une valeur du tableau aest égale à une autre dans le tableau b. Et renvoie False sinon.

Exemple :

Exemple pour (a== b).all()

  • Code :

a = np.array([1,2,3])
b = np.array([4,2,6])
print((a == b).all())

  • Résultat de l’exécution:

Exemple :

Exemple pour (a==b).any()

  • Code :

a = np.array([1,2,3])
b = np.array([4,2,6])
print((a == b).any())

  • Résultat de l’exécution:

3.3. Agrégations

NumPy nous permet de faire des choses intéressantes en une seule ligne de code. Le tableau suivant résume quelques fonctions d’agrégation

FONCTION

SYNTAXE

DESCRIPTION

sum()

np.sum(a) ou a.sum()

La somme de tous les éléments du tableau a.

min()

np.min(a)

La valeur minimum du tableau a.

max()

np.max(a)

La valeur maximum du tableau a.

mean()

a.mean()

a.mean(axis = 0)

a.mean(axis = 1)

- Moyenne générale des valeurs du tableau a.

- Moyenne par colonne.

- Moyenne par ligne.

median()

np.median(a)

Renvoie la ligne des médianes.

cumsum()

cumsum(a)

La somme cumulée des valeurs d’un tableau.

Exemple :

Voilà un exemple d’application simple de ces fonctions d’agrégation.

  • Code :

a = np.array([1,2,3])
print(np.sum(a))
print(np.min(a))
print(np.max(a))
print(np.mean(a))
print(np.median(a))
print(np.cumsum(a))

  • Résultat de l’exécution:

4. Manipulation des tableaux NumPy

On peut accéder aux valeurs d’un tableau NumPy de la même manière que pour les listes Python. En plus de ça, NumPy nous donne la possibilité de sélectionner des éléments du tableau selon certaines conditions.

Exemple :

Dans cet exemple on parcourt le tableau en utilisant l’index de l’élément de la première ligne qui se trouve sur la deuxième colonne.

  • Code :

a = np.array([[1,2,3],
[4,5,6]])
a[0,2] #ligne 0 colonne 2

  • Résultat de l’exécution:

Dans cet exemple on veut afficher les valeurs du tableau a qui sont supérieures à 5.

  • Code :

a = np.array([[[1,2,3],
[4,5,6],
[7,8,9]]])
a[a>5]

  • Résultat de l’exécution:

Pour modifier la forme du tableau, c’est-à-dire le redimensionner, on fait appel à la fonction reshape().

Pour fusionner deux tableaux on utilise la fonction concatenate().

Et pour avoir la matrice transposée on utilise la fonction transpose().

Exemple :

Application directe des fonctions :

  • Code :

a = np.array([1,2,3])
b = np.array([4,5,6])
c = np.concatenate((a,b), axis = 0)
print(c)
print(np.transpose(a))
c.reshape(3,2)

  • Résultat de l’exécution:

Remarque :

Quand on utilise la fonction reshape(). Il faut faire attentionau nombre d’éléments qui doit rester le même.

5. Exercices

Exercice 1 :

Pour cet exercice, la réponse à chaque question ne doit contenir qu’une seule ligne de code.

  1. Créer un tableau T1 qui ne contient que les nombres pairs qui se trouvent entre 0 et 50.
  2. Créer un tableau T2 qui contiennent les cosinus des carrées des éléments de T1.
  3. Quel est le minimum du tableau T2 ?
  4. Quel est le nombre de fois que le maximum du tableau T2 est présent dans T2.

Exercice 2 :

Ecrire un programme qui renvoie ce tableau même inversé. Exemple :

Il prend le tableau suivant [1 2 3 4 5 6] et renvoie le tableau [6 5 4 3 2 1].

Exercice 3 :

Ecrire un programme qui génère un tableau T3 de format 3x3x3 dont les éléments sont aléatoirement choisis de l’intervalle [0,1[ et affiche le premier élément de celui-ci.

Exercice 4 :

Ecrire une fonction qui renvoie une valeur booléenne selon si une matrice est diagonale ou non.

Exercice 5 :

Ecrire une fonction qui renvoie une valeur booléenne selon si une matrice est triangulaire supérieure ou non.

6. Correction

Exercice 1 :

Dans cet exercice nous allons créer un tableau T1 de nombres pairs, puis on va appliquer la fonction cos() sur le carré du tableau créé et on va stocker le résultat dans un autre tableau nommé T2. Puis on cherche le max du tableau T2 qu’on va stocker dans la variable m afin de la comparer avec les valeurs du tableau T2.

  • Code :

T1 = np.arange(0,50,2)
T2 = np.cos(T1**2)
m = np.max(T2)
np.sum(T2 == m)

  • Résultat de l’exécution:

Exercice 2 :

Le but de cet exercice est d’inverser l’ordre des valeurs d’un tableau.

  • Code :

T1 = np.arange(1,7)
print(T1)
T1 = T1[::-1]
print(T1)

  • Résultat de l’exécution:

Exercice 3 :

Dans cet exercice, le but est de se familiariser avec la fonction random(). Et de savoir utiliser les index.

  • Code :

T1 = np.random.random((3,3,3))
print("tableau:\n",T1)
y = T1[:1,:]
print("le premièr élément du tableau:\n",y)

  • Résultat de l’exécution:

Exercice 4 :

Dans cet exercice on a créé une fonction qui parcourt les colonnes et lignes d’un tableau et vérifie à chaque itération si ces valeurs sont nulles ou non afin de voir si le tableau entré en paramètre est une matrice diagonale ou non. 

Celle-ci renvoie True si la matrice est en effet diagonale et False sinon.

Méthode 1 :

  • Code :

def diagonale(T1):
n,p = T1.shape
if n != p:
return False
for i in range(n):
for j in range(p):
if i != j and T1[i,j] != 0:
return False
return True
T1 = np.array([[18,0,0],
[0,20,0],
[0,0,0]])
diagonale(T1)

  • Résultat de l’exécution:

Méthode 2 :

Dans cette deuxième méthode on fait appel à la fonction diag().

  • Code :

def diagonale(T1):
n,p = T1.shape
if n != p:
return False
return(T1 == np.diag(np.diag(T1))).all()
T1 = np.array([[18,0,0],
[0,20,0],
[0,0,0]])
diagonale(T1)

  • Résultat de l’exécution :

Exercice 5 :

Dans cet exercice on a créé une fonction qui parcourt les colonnes et lignes d’un tableau et vérifie à chaque itération si ces valeurs sont nulles ou non afin de voir si le tableau entré en paramètre est une matrice triangulaire supérieur ou non. 

  • Code

def triangulaire_sup(T1):
n,p = T1.shape
if n != p:
return False
for i in range(n):
for j in range(i):
if T1[i,j] != 0:
return False
return True
T1 = np.array([[18,5,6],
[0,20,7],
[0,0,5]])
triangulaire_sup(T1)

  • Résultat de l’exécution :

Conclusion

Pour conclure cette partie, où nous avons vu comment créer des tableaux d’une dimension ou de plusieurs dimensions. Nous avons aussi découvert les fonctions particulières permettant de créer des matrices nulles, des matrices à 1 est des matrices d’identité. Puis on a parcouru quelques fonctions de base. Ensuite on a vu les opérations arithmétiques et de comparaison en NumPy. Enfin on a vu quelques fonctions permettant de manipuler les tableaux et qui sont spécifiques à NumPy.

Il est important de bien maitriser le package NumPy car tous les autres packages nécessaires en Machine Learning sont construit sur la base de cette bibliothèque.

Article publié le 04 Octobre 2020par Imane BENHMIDOU