Introduction
NumPy, abréviation de Numerical Python, est la bibliothèque fondamentale pour le calcul numérique en Python depuis 2006. Elle transforme Python en un outil puissant pour la data science, le machine learning et l'analyse scientifique, en gérant des millions de données avec une efficacité proche du C.
Pourquoi l'apprendre en 2026 ? Avec l'explosion des données (IA générative, big data), NumPy reste incontournable : 90 % des bibliothèques data (Pandas, SciPy, TensorFlow) s'appuient dessus. Imaginez un tableau Excel, mais en 100x plus rapide et multidimensionnel – c'est NumPy. Ce tutoriel conceptuel, sans code, se concentre sur la théorie pour bâtir une intuition solide. Vous comprendrez les tableaux ndarray, les opérations vectorisées et les pièges, pour des projets professionnels dès le départ. Idéal pour débutants motivés par l'analyse de données ou la simulation physique (128 mots).
Prérequis
- Connaissances de base en Python (listes, boucles, fonctions).
- Familiarité avec les concepts mathématiques : vecteurs, matrices.
- Pas d'expérience en calcul scientifique requise.
- Environnement Python installé (mais pas de code ici).
Qu'est-ce que NumPy et son ndarray ?
NumPy repose sur l'objet central : l'ndarray (N-dimensional array).
Contrairement aux listes Python flexibles mais lentes, un ndarray est un bloc contigu de mémoire homogène : tous les éléments ont le même type (int32, float64) et la même taille. Analogie : une feuille de calcul Excel figée en forme et type, optimisée pour le hardware.
Propriétés clés :
- Forme (shape) : Tuple comme (3,4) pour 3 lignes x 4 colonnes.
- Axe (axis) : 0 pour colonnes, 1 pour lignes – crucial pour les agrégations.
- Dtype : Évite les conversions coûteuses ; float64 par défaut pour précision.
Exemple concret : Pour 1 million de températures, une liste Python consomme 10x plus de mémoire et 50x plus de temps. NumPy les stocke en un bloc vectoriel, prêt pour des calculs parallèles.
Création et manipulation des tableaux
Les tableaux se créent à partir de données existantes ou générées.
Méthodes théoriques principales :
- Zéros/uns/remplis : Initialise un tableau vide pour des matrices de poids en ML.
- Arange/linspace : Séries régulières, comme des points d'échantillonnage pour un graphique sinusoïdal (arange : pas entier ; linspace : points égaux).
- De listes : Conversion directe, mais attention à l'homogénéisation forcée.
Manipulation :
- Redimensionner (reshape) : Change la forme sans copier les données (ex. : vecteur 1D → matrice 2D).
- Joindre (concatenate/stack) : Combine tableaux ; stack ajoute une dimension (vstack pour vertical).
Cas d'usage : Dans une simulation météo, linspace génère 100 points de température de 0 à 40°C, reshape les organise en grille 10x10.
Opérations vectorisées et broadcasting
Le cœur de NumPy : vectorisation pour éviter les boucles lentes.
Au lieu de boucler sur des éléments, appliquez une opération à tout le tableau en une instruction. Avantage : 100x plus rapide via BLAS/LAPACK (librairies C optimisées).
Broadcasting : Extension automatique des formes. Règle d'or : dimensions compatibles (1 ou égales). Exemple : Ajouter un scalaire à un vecteur étend le scalaire ; matrice (3,4) + vecteur (3,) agit ligne par ligne.
Fonctions universelles (ufuncs) : sin, exp, sqrt – appliquées élément par élément, supportent le broadcasting.
Étude de cas : Calcul de distances euclidiennes entre 1000 points et un centre. Sans vectorisation : boucle imbriquée (O(n²)). Avec : produit scalaire broadcasting en O(n).
Indexation, slicing et masques booléens
Accès sélectif comme en Python, mais optimisé.
- Indexation basique : [i,j] pour élément ; slicing [start:stop:step] pour sous-tableaux (vues, pas copies !).
- Fancy indexing : Listes d'indices ou tableaux booléens pour sélection avancée.
- Masques : Tableau booléen filtre les éléments (ex. : températures > 30°C).
Exemple concret : Dataset de ventes (1000 lignes). Masque booléen 'ventes > moyenne' sélectionne les top performers sans boucle, puis slicing sur colonnes spécifiques extrait prix/unité.
Fonctions d'agrégation et statistiques
Résumez des datasets massifs en un appel.
- Sum/mean/std : Somme, moyenne, écart-type ; axis=0 pour colonnes.
- Min/max/argmin : Valeurs et positions extrêmes.
- Corrélation (corrcoef) : Mesure linéaire entre variables.
Cas : Analyse financière. Sur 10 ans de rendements (axe=0 : années), cumsum calcule gains cumulés ; std(axis=0) volatilité par actif. Résultat : Matrice de risques en une opération.
Bonnes pratiques
- Choisissez le dtype précis : int8 pour pixels images (économise 75% mémoire) ; évitez object pour performances.
- Préférez les vues aux copies : Slicing gratuit, mais .copy() quand nécessaire pour éviter bugs de modification.
- Utilisez toujours l'axis explicite : Évitez les surprises sur matrices (axis=0 colonnes, 1 lignes).
- Vectorisez tout : Mesurez le speedup ; si <10x, revoyez votre boucle.
- Profilez la mémoire : .nbytes pour anticiper les OutOfMemory sur datasets >1GB.
Erreurs courantes à éviter
- Confusion vue vs copie : Modifier un slice altère l'original ; testez avec print(id(tableau)) == id(slice).
- Broadcasting raté : Formes incompatibles (ex. (3,4) + (4,3)) → erreur ; alignez avec reshape(-1).
- Dtype par défaut inadapté : float64 gaspille sur entiers ; spécifiez explicitement.
- Boucles Python inutiles : Perdez 100x vitesse ; forcez la vectorisation même pour n<1000.
Pour aller plus loin
- Documentation officielle : numpy.org.
- Livre référence : Guide to NumPy de Travis Oliphant (créateur).
- Pratique : Kaggle datasets pour tester concepts.
- Formations avancées : Découvrez nos formations Learni sur Python Data Science.
- Prochaines étapes : Pandas pour dataframes, Matplotlib pour visualisation.