NumPy est une bibliothèque pour le langage de programmation Python, destinée à manipuler des matrices ou tableaux multidimensionnels ainsi que des fonctions mathématiques opérant sur ces tableaux. Plus précisément, cette bibliothèque logicielle libre et open source fournit de multiples fonctions permettant notamment de créer directement un tableau depuis un fichier ou au contraire de sauvegarder un tableau dans un fichier, et manipuler des vecteurs, matrices et polynômes.
NumPy 2.0.0 est la première version majeure depuis 2006. Elle est le résultat de 11 mois de développement depuis la dernière version et est le fruit du travail de 212 contributeurs répartis sur 1078 pull requests. Elle contient un grand nombre de nouvelles fonctionnalités passionnantes ainsi que des modifications des API Python et C. Cette version majeure inclut des ruptures qui n'auraient pas pu se produire dans une version mineure normale (fonctionnalité) : y compris une rupture ABI, des changements dans les règles de promotion de type, et des changements d'API qui n'auraient peut-être pas émis d'avertissements de dépréciation dans la version 1.26.x.
Voici les principaux changements de cette version :
- Nouvelles fonctionnalités
Un nouveau dtype de chaîne de longueur variable, StringDType, et un nouvel espace de noms numpy.strings avec des ufuncs performants pour les opérations sur les chaînes.
Prise en charge de float32 et longdouble dans toutes les fonctions numpy.fft.
Support du standard API tableau dans l'espace de noms principal de numpy. - Amélioration des performances
Les fonctions de tri (sort, argsort, partition, argpartition) ont été accélérées par l'utilisation des bibliothèques Intel x86-simd-sort et Google Highway, et peuvent voir des accélérations importantes (spécifiques au matériel).
macOS prend en charge l'accélération et les roues binaires pour macOS >=14, avec des améliorations significatives des performances pour les opérations d'algèbre linéaire sur macOS, et des roues qui sont environ 3 fois plus petites.
Les opérations sur les chaînes de caractères de longueur fixe numpy.char ont été accélérées par l'implémentation d'ufuncs qui supportent également StringDType en plus des dtypes de chaînes de caractères de longueur fixe.
Une nouvelle API de traçage et d'introspection, opt_func_info, pour déterminer quels noyaux spécifiques au matériel sont disponibles et seront distribués.
numpy.save utilise maintenant le protocole pickle version 4 pour sauvegarder les tableaux avec dtype objet, ce qui permet d'utiliser des objets pickle plus grands que 4GB et améliore la vitesse de sauvegarde d'environ 5% pour les grands tableaux. - Améliorations de l'API Python
Une séparation claire entre l'API publique et privée, avec une nouvelle structure de module, et chaque fonction publique est maintenant disponible à un seul endroit.
De nombreuses suppressions de fonctions et d'alias non recommandés. Cela devrait faciliter l'apprentissage et l'utilisation de NumPy. Le nombre d'objets dans l'espace de noms principal a diminué de ~10% et dans numpy.lib de ~80%.
Noms canoniques des types de données et nouvelle fonction d'introspection isdtype. - Améliorations de l'API C
Une nouvelle API C publique pour créer des dtypes personnalisés.
De nombreuses fonctions et macros obsolètes ont été supprimées, et les fonctions internes privées ont été cachées pour faciliter l'extensibilité future.
Nouvelles fonctions d'initialisation plus faciles à utiliser : PyArray_ImportNumPyAPI et PyUFunc_ImportUFuncAPI. - Amélioration du comportement
Le comportement des promotions de type a été amélioré par l'adoption de la NEP 50. Cela corrige de nombreuses surprises des utilisateurs concernant les promotions qui, auparavant, dépendaient souvent des valeurs de données des tableaux d'entrée plutôt que seulement de leurs dtypes. Veuillez consulter le NEP et le guide de migration NumPy 2.0 pour plus de détails, car ce changement peut entraîner des modifications dans les dtypes de sortie et des résultats de moindre précision pour les opérations de type mixte.
Le type d'entier par défaut sur Windows est maintenant int64 au lieu de int32, ce qui correspond au comportement sur d'autres plateformes.
Le nombre maximal de dimensions d'un tableau passe de 32 à 64. - Documentation
La navigation dans le guide de référence a été considérablement améliorée, et il y a maintenant de la documentation sur la structure des modules de NumPy.
La documentation sur la construction à partir des sources a été complètement réécrite.
En outre, de nombreux changements ont été apportés aux composants internes de NumPy, notamment la poursuite de la migration du code de C vers C++, ce qui facilitera l'amélioration et la maintenance de NumPy à l'avenir.
Le théorème "no free lunch" stipule qu'il y a un prix à payer pour toutes ces améliorations de l'API et du comportement et pour une meilleure extensibilité future. Ce prix est le suivant :
- La rétrocompatibilité. Les API Python et C ont subi un nombre important de changements radicaux. Dans la majorité des cas, des messages d'erreur clairs indiquent à l'utilisateur comment adapter son code. Cependant, il y a aussi des changements de comportement pour lesquels il n'était pas possible de donner un tel message d'erreur.
Notez qu'il existe un mode ruff pour corriger automatiquement de nombreuses choses dans le code Python. - Changements radicaux dans l'ABI de NumPy. En conséquence, les binaires des paquets qui utilisent l'API C de NumPy et qui ont été construits avec une version 1.xx de NumPy ne fonctionneront pas avec NumPy 2.0. Lors de l'importation, ces paquets verront apparaître une ImportError avec un message d'incompatibilité binaire.
Il est possible de construire des binaires contre NumPy 2.0 qui fonctionneront à l'exécution avec NumPy 2.0 et 1.x.
Il est conseillé à tous les paquets en aval qui dépendent de l'ABI de NumPy de faire une nouvelle version construite avec NumPy 2.0 et de vérifier que cette version fonctionne à la fois avec 2.0 et 1.26 - idéalement dans la période entre 2.0.0rc1 (qui sera ABI-stable) et la version finale 2.0.0 afin d'éviter des problèmes pour leurs utilisateurs.
Les versions de Python supportées par cette version sont 3.9-3.12.
Source : Release Note NumPy 2.0
Et vous ?
Quel est votre avis sur cette nouvelle mise à jour de NumPy ?
Voir aussi :
Python 3.13 ajoute un compilateur JIT qui pourrait améliorer les performances du langage d'environ 9 %, mais l'annonce suscite des réactions mitigées
Python creuse l'écart et renforce son avance en tant que langage de programmation le plus populaire sur l'indice TIOBE, mais pourquoi le langage est-il autant prisé ?
Apprendre les notions avancées de Numpy, un tutoriel de Gabor Laszlo Hajba traduit par l'équipe de rédaction