numpy#
courant
Bibliothèque tierce
pip install numpy — ne fait pas partie de la bibliothèque standard.
Créer des tableaux#
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([[1, 2], [3, 4]]) # tableau 2D
np.zeros(5) # array([0., 0., 0., 0., 0.])
np.ones((2, 3)) # tableau 2x3 rempli de 1
np.arange(0, 10, 2) # array([0, 2, 4, 6, 8]), comme range()
np.linspace(0, 1, 5) # 5 valeurs régulièrement espacées entre 0 et 1
a.shape # (4,) — dimensions du tableau
a.dtype # int64 — type des éléments
b.shape # (2, 2)
Indexation et slicing#
a[0]; a[-1]; a[1:3] # comme une liste Python
b[0, 1] # élément ligne 0, colonne 1 → 2
b[:, 0] # toute la colonne 0 → array([1, 3])
b[0, :] # toute la ligne 0 → array([1, 2])
a[a > 2] # array([3, 4]) — indexation booléenne
Piège
Le slicing (a[1:3]) renvoie une vue, pas une copie : modifier la vue modifie le tableau d'origine. Utiliser a[1:3].copy() pour obtenir une copie indépendante.
Opérations vectorisées#
a + 1 # array([2, 3, 4, 5]) — appliqué élément par élément
a * 2 # array([2, 4, 6, 8])
a + a # array([2, 4, 6, 8]) — addition élément par élément (pas de concaténation)
np.sqrt(a); np.exp(a); np.log(a)
a.sum(); a.mean(); a.std(); a.min(); a.max()
Piège
liste1 + liste2 concatène deux listes Python, mais array1 + array2 les additionne élément par élément. Confondre les deux est une source d'erreurs fréquente en venant des listes.
Broadcasting#
b + 10 # 10 est appliqué à chaque élément de b
b + np.array([1, 0]) # array([1, 0]) est appliqué à chaque ligne de b
Broadcasting
Numpy étend automatiquement les tableaux de formes compatibles pour effectuer une opération, sans copier les données. Deux dimensions sont compatibles si elles sont égales, ou si l'une des deux vaut 1.
Reshape#
c = np.arange(6) # array([0, 1, 2, 3, 4, 5])
c.reshape(2, 3) # array([[0, 1, 2], [3, 4, 5]])
c.reshape(-1, 1) # colonne : -1 = "calculé automatiquement"
b.flatten() # aplatit en 1D
b.T # transposée
Algèbre linéaire de base#
np.dot(a, a) # produit scalaire
b @ b # produit matriciel (opérateur @)
np.linalg.inv(b) # matrice inverse
np.linalg.det(b) # déterminant