Introduction à NumPy (Python)
NumPy (pour Numerical Python) est la bibliothèque de référence pour le calcul numérique en Python. Avec un tel CV, il fallait absolument lui consacrer une page sur ce site…
Domaines d’utilisation
La bibliothèque NumPy est utilisée dans de nombreux domaines. Par exemple…
- sciences et ingénierie,
- intelligence artificielle,
- analyse de données,
- finance,
- traitement du signal et des images,
- statistiques…
La plupart des bibliothèques scientifiques de Python (pandas, SciPy, scikit-learn, TensorFlow, etc.) s'appuient sur NumPy.
Tableau numérique
Python permet de manipuler des listes. Cependant, celles-ci présentent plusieurs limites : elles sont relativement lentes pour les calculs et elles ne permettent pas les opérations mathématiques globales.
NumPy introduit une nouvelle structure : le tableau numérique (array). Vous noterez que l’alias de NumPy est np :
import numpy as np
temperatures = np.array([12, 15, 18, 14])
Conçus pour les calculs, les tableaux requièrent moins de mémoire (tous leurs éléments sont du même type : entiers, réels…). On apprécie aussi NumPy pour sa rapidité (les opérations sont exécutées par du code compilé en langage C).
La structure fondamentale de NumPy est le ndarray (N-dimensional array), c'est-à-dire un tableau pouvant posséder une ou plusieurs dimensions. Prenons quelques exemples.
Tableau à une dimension :
a = np.array([3, 5, 8, 12])
Tableau à deux dimensions :
b = np.array([
[1, 2, 3],
[4, 5, 6]
])
Tableau à trois dimensions :
c = np.array([
[[1,2],[3,4]],
[[5,6],[7,8]]
])
NumPy peut aussi manipuler des tableaux comportant davantage de dimensions.
Syntaxe
Comparons deux syntaxes. Dans cet exemple, on ajoute deux points à chaque note.
Sans NumPy :
notes = [12,15,18]
resultat = []
for n in notes:
resultat.append(n + 2)
Avec NumPy :
notes = np.array([12,15,18])
resultat = notes + 2

Création et attributs de tableaux
Pour créer un tableau à partir d’une liste :
a = np.array([5,8,12])
- Pour créer un tableau composé de cinq zéros : np.zeros(5)
- Composé de cinq 1 : np.ones(5)
- Composé de tous les entiers de 0 à 9 : np.arange(0,10)
- Composé de 6 nombres régulièrement espacés entre 0 et 1 : np.linspace(0,1,6)
Pour connaître le nombre de lignes et de colonnes d’un tableau, considérons a :
a = np.array([
[2,5,8],
[1,7,4]
])
Si l’on demande a.shape on obtient (2,3). Soit 2 lignes et 3 colonnes. De même, a.ndim renvoie 2, soit le nombre de dimensions, et a.size renvoie 6, le nombre d’éléments.
Opérations
La vectorisation est une opération appliquée à un tableau qui est effectuée automatiquement sur chacun de ses éléments, sans écrire de boucle. Nous l’avons illustré plus haut en ajoutant 2 à un ensemble de notes. De même, on peut additionner, multiplier ou diviser deux tableaux, ou en élever un à une puissance.
NumPy possède bien sûr de nombreuses fonctions mathématiques (toujours avec notre tableau a) : racine carrée (np.sqrt(a)), sinus et cosinus (np.sin(a) et np.cos(a)), exponentielle (np.exp(a)), logarithme népérien (np.log(a))…
Quant aux fonctions statistiques (par exemple avec note : somme (np.sum(note)), moyenne (np.mean(note)), minimum et maximum (np.min(note) et np.max(note)), variance et écart-type (np.var(note) et np.std(note)) ou encore médiane (np.median(note)).
En page de régression linéaire simple avec R et Python vous trouverez un exemple d’utilisation de sqrt(), sum() et mean().
Fonction de tri : np.sort(notes)
Indices du minimum et du maximum : np.argmin(notes) et np.argmax(notes).
Calcul matriciel
NumPy est particulièrement adapté à l'algèbre linéaire.
- Produit matriciel : A @ B ou np.matmul(A,B).
- Transposée de A : A.T
- Déterminant : np.linalg.det(A)
- Inverse : np.linalg.inv(A)
- Valeurs propres : np.linalg.eig(A)
Nombres aléatoires
NumPy contient un générateur de nombres pseudo-aléatoires. Ainsi, np.random.rand(5) restitue cinq réels compris entre 0 et 1, np.random.randint(1,7,20) restitue vingt entiers compris entre 1 et 6 (rappelons que Python considère les intervalles avec borne inférieure incluse et borne supérieure exclue), np.random.normal(100,15,1000) restitue mille valeurs suivant une loi normale de moyenne 100 et d’écart-type 15…
