La bibliothèque NumPy est une bibliothèque Python incontournable pour les data scientists : une bonne raison de s’y familiariser.
Les tableaux NumPy ressemblent aux listes Python, mais en beaucoup mieux ! Ils sont bien plus faciles à manipuler : un seul tableau peut remplacer plusieurs listes. Ils calculent aussi plus vite que les listes et sont extrêmement efficaces pour les opérations mathématiques et logiques. C’est un outil puissant à connaître !
Cet article est un aide-mémoire qui donne un aperçu rapide des bases de la bibliothèque NumPy ainsi que des méthodes utiles.
En bref : NumPy est la bibliothèque Python de référence pour manipuler des tableaux numériques. Un tableau NumPy ressemble à une liste Python, mais il calcule plus vite et un seul tableau peut remplacer plusieurs listes. Cet aide-mémoire montre comment créer des tableaux, accéder à leurs éléments, utiliser le broadcasting, faire des calculs matriciels et filtrer avec des masques booléens.
Tu peux aussi exécuter les exemples NumPy dans ce notebook Google Colab : chaque extrait de code est dans sa propre cellule, prêt à être modifié.
Je te montre comment initialiser des tableaux NumPy de plusieurs façons, accéder aux valeurs d’un tableau, effectuer des opérations mathématiques et matricielles, et utiliser les tableaux pour le masquage et les comparaisons. Je trouve les tableaux NumPy très utiles pour résoudre des problèmes data en Python.
Commençons la partie fun : de la pratique et de la bonne humeur.
Comment importer la bibliothèque NumPy ?
Tout d’abord, importe la bibliothèque NumPy avec le code suivant :
import numpy as npPythonComment créer un tableau NumPy ?
Voici plusieurs façons d’initialiser un tableau NumPy, selon tes besoins :
array1 = np.array([0, 1, 2, 3, 4, 5])
array1Pythonarray([0, 1, 2, 3, 4, 5])array2 = np.array([[0, 1, 2], [3, 4, 5]])
array2Pythonarray([[0, 1, 2],
[3, 4, 5]])array3 = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
array3Pythonarray([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])Tableau contenant les chiffres de 0 à 9
array4 = np.array(range(10)) # tableau avec des chiffres de 0 à 9
array4Pythonarray([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])Tableau 4 lignes x 3 colonnes contenant des zéros
array5 = np.zeros((4,3))
array5Pythonarray([[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]])Tableau 2 x 2 contenant des 1
array6 = np.ones((2,2))
array6Pythonarray([[1., 1.],
[1., 1.]])Matrice Identité de dimension 3
array7 = np.identity(3)
array7Pythonarray([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])Si tu as une liste que tu souhaites convertir en tableau NumPy, tu peux le faire facilement avec np.array :
lst = [0, 1, 2, 3, 4]
numpy_list = np.array(lst)
numpy_listPythonarray([0, 1, 2, 3, 4])Comment accéder aux éléments d’un tableau NumPy ?
Tu peux accéder à un élément individuel ou à une tranche de valeurs. Comme pour les listes, le premier élément a l’index 0.
Par exemple, array3[0,0] désigne l’élément situé sur la première ligne et la première colonne. Le premier nombre du tuple [0,0] est l’index de la ligne, le deuxième est l’index de la colonne.
Voici le tableau array3 :
array3Pythonarray([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])Extraire un élément
Remarque : avec NumPy 2, une valeur isolée s’affiche sous la forme np.int64(0) (ou np.float64(9.0)) dans un notebook. Les exemples ci-dessous montrent l’affichage simplifié des anciennes versions ; avec print(), tu obtiens la valeur seule.
array3[0,0] # accéder à la ligne d'index 0 et colonne d'index 0Python0array3[1,2] # accéder à la ligne d'index 1, colonne d'index 2Python5array3[0,2] # accéder à la ligne d'index 0, colonne d'index 2Python2array3[2,1] # accéder à la ligne d'index 2, colonne d'index 1Python7Extraire un sous-tableau
array3[1:3,1:3] # extraire un extrait du tableau array3Pythonarray([[4, 5],
[7, 8]])Qu’est-ce que le broadcasting dans NumPy ?
« Le terme broadcasting décrit comment NumPy traite des tableaux de formes différentes lors d’opérations arithmétiques. » (traduit de la documentation NumPy)
Le broadcasting permet d’effectuer des opérations entre des tableaux de formes différentes, en « étirant » virtuellement le plus petit pour qu’il corresponde au plus grand, sans copier les données.
Pour cela, NumPy compare les formes des deux tableaux dimension par dimension, en partant de la dernière. Deux dimensions sont compatibles lorsque :
- elles sont identiques, ou
- l’une d’elles est 1
Si ces conditions ne sont pas remplies, NumPy renvoie une erreur ValueError: operands could not be broadcast together, qui indique que les tableaux ont des formes incompatibles.
Prenons un tableau de 6 chiffres de 0 à 5 :
x = np.arange(6)
xPythonarray([0, 1, 2, 3, 4, 5])L’attribut shape affiche la dimension (la forme) d’un tableau :
x.shape # retourne la dimension / forme d'un tableauPython(6,)Prenons maintenant y, un tableau contenant cinq 1 :
y = np.ones(5)
yPythonarray([1., 1., 1., 1., 1.])On vérifie sa forme :
y.shapePython(5,)Essayons d’additionner x et y, dont les formes ne sont pas compatibles. NumPy renvoie une erreur :
x + yPythonValueError: operands could not be broadcast together with shapes (6,) (5,)Pour obtenir le résultat voulu, on utilise la méthode reshape(). Elle modifie la forme du tableau pour le rendre compatible avec l’opération :
z = x.reshape(6,1)
zPythonarray([[0],
[1],
[2],
[3],
[4],
[5]])On peut maintenant additionner z (forme (6, 1)) et y (forme (5,)). Le résultat a la forme (6, 5) :
z + yPythonarray([[1., 1., 1., 1., 1.],
[2., 2., 2., 2., 2.],
[3., 3., 3., 3., 3.],
[4., 4., 4., 4., 4.],
[5., 5., 5., 5., 5.],
[6., 6., 6., 6., 6.]])Comment faire des calculs mathématiques et matriciels avec NumPy ?
L’une des raisons pour lesquelles j’adore les tableaux NumPy, c’est qu’ils sont très faciles à manipuler : concaténer, ajouter, multiplier, transposer… en une seule ligne de code !
Tu trouveras ci-dessous quelques exemples d’opérations arithmétiques et multiplicatives avec les tableaux NumPy. Les opérations non traitées ici sont décrites dans la documentation officielle.
arr1 = np.ones((3,3))
arr1Pythonarray([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])arr2 = np.arange(9).reshape(3,3)
arr2Pythonarray([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])Somme de 2 tableaux
arr1 + arr2 # somme de arr1 et arr2Pythonarray([[1., 2., 3.],
[4., 5., 6.],
[7., 8., 9.]])Ajouter 1 à chaque valeur d’un tableau
arr1 + 1 # ajoute 1 à chaque élémentPythonarray([[2., 2., 2.],
[2., 2., 2.],
[2., 2., 2.]])Sommer toutes les valeurs d’un tableau
np.sum(arr1) # calcule la somme des valeurs de arr1Python9.0Multiplication terme à terme de 2 tableaux
(arr1 + 1) * arr2 # multiplication de 2 tableauxPythonarray([[ 0., 2., 4.],
[ 6., 8., 10.],
[12., 14., 16.]])Produit matriciel de 2 tableaux
np.dot(arr1, arr2)Pythonarray([[ 9., 12., 15.],
[ 9., 12., 15.],
[ 9., 12., 15.]])Parmi les autres fonctionnalités intéressantes, on trouve la concaténation, le fractionnement, la transposition (échange des lignes et des colonnes) et l’obtention des éléments de la diagonale.
Concaténer par lignes
np.concatenate((arr1, arr2), axis=0) # concaténer le long des lignes (axe 0)Pythonarray([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.],
[0., 1., 2.],
[3., 4., 5.],
[6., 7., 8.]])Concaténer par colonnes
np.concatenate((arr1, arr2), axis=1) # concaténer le long des colonnes (axe 1)Pythonarray([[1., 1., 1., 0., 1., 2.],
[1., 1., 1., 3., 4., 5.],
[1., 1., 1., 6., 7., 8.]])À retenir : axis=0 indique que l’on concatène par lignes, et axis=1 par colonnes.
Séparer un tableau en 3 tableaux
np.split(arr2,3) # séparer le tableau arr2 en 3 tableauxPython[array([[0, 1, 2]]), array([[3, 4, 5]]), array([[6, 7, 8]])]Séparer un tableau horizontalement
np.hsplit(arr2,3) # séparer le tableau arr2 horizontalementPython[array([[0],
[3],
[6]]), array([[1],
[4],
[7]]), array([[2],
[5],
[8]])]Supprimer une ligne d’un tableau
np.delete(arr2, 2, axis=0) # supprime la ligne d'index 2Pythonarray([[0, 1, 2],
[3, 4, 5]])Supprimer une colonne d’un tableau
np.delete(arr2, 2, axis=1) # supprime la colonne d'index 2Pythonarray([[0, 1],
[3, 4],
[6, 7]])Transposition de tableau
np.transpose(arr2)Pythonarray([[0, 3, 6],
[1, 4, 7],
[2, 5, 8]])Obtenir les valeurs de la diagonale d’un tableau
arr2.diagonal() # obtenir les éléments de la diagonale de arr2Pythonarray([0, 4, 8])Comment comparer et filtrer un tableau NumPy avec un masque booléen ?
Une chose utile avec les tableaux NumPy est de comparer un tableau à une valeur ou à un autre tableau. La comparaison renvoie un tableau de booléens.
array1Pythonarray([0, 1, 2, 3, 4, 5])Retourner un tableau de booléens
array1 > 2 # retourne un tableau de booléensPythonarray([False, False, False, True, True, True])On peut utiliser ce tableau booléen à notre avantage : c’est le masquage booléen. En l’utilisant comme masque, on sélectionne le sous-ensemble de données qui nous intéresse.
mask = array1 > 2
array1[mask]Pythonarray([3, 4, 5])Il existe de nombreux autres opérateurs de comparaison : == (égalité), != (différence), <= (inférieur ou égal)…
On peut même combiner plusieurs conditions avec & (« ET ») ou | (« OU »). Chaque condition doit être placée entre parenthèses :
mask = (array1 > 4) | (array1 < 2)
array1[mask]Pythonarray([0, 1, 5])Pour pratiquer NumPy et Pandas sur des jeux de données réels, le parcours Analyse et visualisation des données de DataXp te fait pratiquer sur des exercices corrigés, avec un coach IA qui t’aide quand tu bloques. Les premiers modules sont gratuits.
Questions fréquentes sur NumPy
Quelle est la différence entre un tableau NumPy et une liste Python ?
Un tableau NumPy ressemble à une liste, mais il est plus facile à manipuler (un seul tableau peut remplacer plusieurs listes), il calcule plus vite et il est très efficace pour les opérations mathématiques et logiques.
Qu’est-ce que le broadcasting dans NumPy ?
C’est la façon dont NumPy traite des tableaux de formes différentes lors d’opérations arithmétiques : il « étire » virtuellement le plus petit tableau pour qu’il corresponde au plus grand, sans copier les données. NumPy compare les formes dimension par dimension, en partant de la dernière : deux dimensions sont compatibles si elles sont identiques ou si l’une d’elles vaut 1.
Que faire quand NumPy renvoie « operands could not be broadcast together » ?
Cette ValueError indique que les tableaux ont des formes incompatibles. Utilise reshape() pour modifier la forme d’un tableau : par exemple, un tableau de forme (6, 1) et un tableau de forme (5,) s’additionnent et donnent un résultat de forme (6, 5).
Comment filtrer un tableau NumPy avec une condition ?
Avec le masquage booléen : comparer le tableau à une valeur renvoie un tableau de booléens, que tu utilises comme masque pour sélectionner les éléments voulus. Pour combiner plusieurs conditions, utilise & (ET) ou | (OU), chaque condition entre parenthèses.
À quoi servent axis=0 et axis=1 pour concaténer des tableaux ?
axis=0 concatène par lignes et axis=1 par colonnes.
Pour aller plus loin avec Python, consulte aussi notre guide des 21 astuces et concepts Python pour améliorer ton code.












