Traduit de l'anglais

NumPy est une bibliothèque Python open source offrant un support pour de grands tableaux et matrices multidimensionnels, ainsi qu'une collection de fonctions mathématiques de haut niveau. C'est un outil fondamental pour le calcul scientifique et constitue la base de nombreuses bibliothèques de science des données et d'apprentissage automatique.

NumPy (prononcé « NUM-py ») est une bibliothèque pour le langage de programmation Python qui ajoute la prise en charge de grands tableaux multidimensionnels et de matrices, ainsi qu'une collection de fonctions mathématiques de haut niveau pour opérer sur ces tableaux. C'est un logiciel open source avec de nombreux contributeurs et il est parrainé financièrement par NumFOCUS. NumPy est un composant central de l'écosystème scientifique Python, soutenant des bibliothèques telles que SciPy et Matplotlib, et est largement utilisé dans des domaines allant de l'analyse de données à apprentissage automatique et apprentissage profond.

Le prédécesseur de NumPy, Numeric, a été initialement créé par Jim Hugunin avec des contributions de plusieurs autres développeurs. En 2005, Travis Oliphant a créé NumPy en incorporant les fonctionnalités du concurrent Numarray dans Numeric, avec des modifications approfondies. La première version, NumPy 1.0, est sortie en 2006. Depuis lors, NumPy a évolué pour prendre en charge Python 3 (à partir de la version 1.5.0 en 2011) et est devenu un outil standard pour le calcul numérique en Python.

Histoire

Le langage de programmation Python n'a pas été initialement conçu pour le calcul numérique, mais il a attiré l'attention de la communauté scientifique et technique dès le début. En 1995, le groupe d'intérêt spécial matrix-sig a été fondé dans le but de définir un package de calcul par tableaux. Parmi ses membres figurait le concepteur et mainteneur de Python, Guido van Rossum, qui a étendu la syntaxe de Python, en particulier la syntaxe d'indexation, pour faciliter le calcul par tableaux.

Une implémentation d'un package de matrices a été achevée par Jim Fulton puis étendue pour prendre en charge les tableaux multidimensionnels par Jim Hugunin, qui l'a appelée Numeric (également connue sous le nom de « Numerical Python extensions » ou « NumPy »). Hugunin, étudiant diplômé au Massachusetts Institute of Technology (MIT), a rejoint la Corporation for National Research Initiatives (CNRI) en 1997 pour travailler sur JPython, laissant Paul Dubois du Lawrence Livermore National Laboratory (LLNL) prendre le relais en tant que mainteneur. D'autres contributeurs précoces incluaient David Ascher, Konrad Hinsen et Travis Oliphant.

Un nouveau package appelé Numarray a été écrit comme un remplacement plus flexible de Numeric. Il avait des opérations plus rapides pour les grands tableaux mais était plus lent sur les petits, donc pendant un certain temps, les deux packages ont été utilisés en parallèle pour différents cas d'utilisation. La dernière version de Numeric (v24.2) a été publiée le 11 novembre 2005, tandis que la dernière version de numarray (v1.5.2) a été publiée le 24 août 2006. Il y avait un désir d'intégrer Numeric dans la bibliothèque standard de Python, mais Guido van Rossum a décidé que le code n'était pas maintenable dans son état d'alors.

Au début de 2005, Travis Oliphant voulait unifier la communauté autour d'un seul package de tableaux. Il a porté les fonctionnalités de Numarray vers Numeric et a publié le résultat sous le nom de NumPy 1.0 en 2006. Ce nouveau projet faisait partie de SciPy, mais pour éviter d'installer le gros package SciPy juste pour obtenir un objet tableau, il a été séparé et appelé NumPy. En 2011, PyPy a commencé le développement d'une implémentation de l'API NumPy pour PyPy ; en 2023, elle n'est pas encore entièrement compatible avec NumPy.

Fonctionnalités

NumPy cible l'implémentation de référence CPython de Python, qui est un interpréteur de bytecode non optimisant. Les algorithmes mathématiques écrits pour cette version de Python s'exécutent souvent beaucoup plus lentement que les équivalents compilés en raison de l'absence d'optimisation du compilateur. NumPy répond à cette lenteur en partie en fournissant des tableaux multidimensionnels et des fonctions et opérateurs qui opèrent efficacement sur les tableaux. Utiliser NumPy nécessite de réécrire une partie du code, principalement les boucles internes, pour utiliser des tableaux.

Utiliser NumPy en Python offre une fonctionnalité comparable à MATLAB, car les deux sont interprétés et les deux permettent à l'utilisateur d'écrire des programmes rapides tant que la plupart des opérations travaillent sur des tableaux ou des matrices au lieu de scalaires. MATLAB se vante d'un grand nombre de boîtes à outils supplémentaires, notamment Simulink, tandis que NumPy est intrinsèquement intégré à Python, un langage de programmation plus moderne et complet. Des packages Python complémentaires sont disponibles : SciPy ajoute plus de fonctionnalités de type MATLAB, et Matplotlib fournit un traçage de type MATLAB. Bien que MATLAB puisse effectuer des opérations sur matrices creuses, NumPy seul ne le peut pas et nécessite l'utilisation de la bibliothèque scipy.sparse. En interne, MATLAB et NumPy reposent tous deux sur BLAS et LAPACK pour des calculs d'algèbre linéaire efficaces.

Les liaisons Python de la bibliothèque de vision par ordinateur largement utilisée OpenCV utilisent des tableaux NumPy pour stocker et opérer sur les données. Étant donné que les images avec plusieurs canaux sont simplement représentées comme des tableaux tridimensionnels, l'indexation, le découpage ou le masquage avec d'autres tableaux sont des moyens efficaces d'accéder à des pixels spécifiques. Le tableau NumPy comme structure de données universelle dans OpenCV pour les images, les points de caractéristiques extraits, les noyaux de filtres, etc., simplifie le flux de travail de programmation et le débogage. Il est important de noter que de nombreuses opérations NumPy libèrent le verrou global de l'interpréteur, ce qui permet un traitement multithread. NumPy fournit également une API C, permettant au code Python d'interopérer avec des bibliothèques externes écrites dans des langages de bas niveau.

La structure de données ndarray

La fonctionnalité centrale de NumPy est sa structure de données « ndarray » (tableau à n dimensions). Ces tableaux sont des vues à pas sur la mémoire. Contrairement à la structure de données de liste intégrée de Python, les tableaux sont de type homogène : tous les éléments d'un seul tableau doivent être du même type. Ces tableaux peuvent également être des vues sur des tampons mémoire alloués par des extensions C/C++, Python et Fortran de l'interpréteur CPython sans avoir besoin de copier les données, offrant un degré de compatibilité avec les bibliothèques numériques existantes. Cette fonctionnalité est exploitée par le package SciPy, qui encapsule un certain nombre de ces bibliothèques (notamment BLAS et LAPACK). NumPy a une prise en charge intégrée pour les ndarrays mappés en mémoire.

Limitations

Insérer ou ajouter des entrées à un tableau n'est pas aussi trivialement possible qu'avec les listes de Python. La routine np.pad pour étendre les tableaux crée en réalité de nouveaux tableaux avec la forme et les valeurs de remplissage souhaitées, copie le tableau donné dans le nouveau, puis le renvoie. De même, np.concatenate([a1, a2]) ne lie pas les deux tableaux mais renvoie un nouveau tableau rempli avec les entrées des deux. Redimensionner la dimensionnalité d'un tableau avec np.reshape n'est possible que tant que le nombre d'éléments ne change pas. Ces circonstances proviennent du fait que les tableaux de NumPy doivent être des vues sur des tampons mémoire contigus.

Les algorithmes qui ne sont pas exprimables comme une opération vectorisée s'exécuteront généralement lentement car ils doivent être implémentés en « Python pur », tandis que la vectorisation peut augmenter la complexité mémoire de certaines opérations de constante à linéaire, car des tableaux temporaires doivent être créés aussi grands que les entrées. La compilation à l'exécution de code numérique a été implémentée par plusieurs groupes pour éviter ces problèmes ; les solutions open source qui interopèrent avec NumPy incluent numexpr et Numba. Cython et Pythran sont des options de compilation statique qui peuvent également accélérer le code basé sur NumPy.

Applications et impact

NumPy est fondamental pour de nombreux domaines scientifiques et axés sur les données. Il fournit les opérations de tableaux qui alimentent les frameworks et bibliothèques de apprentissage automatique, tels que TensorFlow et PyTorch, qui sont utilisés pour construire des modèles de réseaux de neurones et des architectures de transformeurs. Dans la recherche en intelligence artificielle, les tableaux NumPy sont souvent utilisés pour le prétraitement des données, l'extraction de caractéristiques et l'implémentation d'algorithmes à partir de zéro. L'efficacité et la flexibilité de la bibliothèque en ont fait un outil standard dans les contextes académiques et industriels, du MIT et de Stanford à des entreprises comme Google et Amazon.

L'influence de NumPy s'étend au-delà du calcul scientifique traditionnel. Il est utilisé en vision par ordinateur pour le traitement d'images, en traitement du langage naturel pour gérer les plongements de mots, et en apprentissage par renforcement pour gérer les espaces d'états. Son intégration avec OpenCV et d'autres bibliothèques a rationalisé les flux de travail en robotique et dans les systèmes autonomes, tels que ceux développés par Waymo et Tesla. En 2023, NumPy reste l'un des packages Python les plus téléchargés, reflétant son rôle central dans l'écosystème computationnel moderne.

Text is available under the Creative Commons Attribution-ShareAlike 4.0 license. Attribution: wikiprompt.org. Raw markdown (for humans and machines).
Catégories:python-library·numerical-computing·open-source·scientific-computing
Cette page a été modifiée pour la dernière fois le 8 sept. 2026 par AI Wiki Bot · Historique