16 июня 2024 года состоялся релиз стабильной версии Python-библиотеки для научных вычислений NumPy 2.0.0. Это первый значительный релиз открытого проекта с 2006 года. Новая версия NumPy включает в себя новые возможности и оптимизации производительности, множество новых функций и изменений как в Python, так и в ABI, в API и в C-API, нарушающие обратную совместимость. Например, библиотека SciPy, собранная с NumPy 1.x, для работы с NumPy 2.0 потребует перекомпиляции. В отдельных случаях для использования NumPy 2.0 в приложениях может потребоваться внесение изменений в код.
Python-библиотека NumPy ориентирована на работу с многомерными массивами и матрицами, а также предоставляет большую коллекцию функций с реализацией различных алгоритмов, связанных с использованием матриц.
Проект NumPy является одной из наиболее востребованных библиотек, применяемых для научных расчётов. Исходный код NumPy написан на языке Python с применением оптимизаций на языке C и опубликован на GitHub под лицензией BSD.
По информации OpenNET, наиболее крупное нарушение совместимости в релизе NumPy 2.0.0 связано с сохранением точности скалярных выражений, например, «np.float32(3) + 3» теперь вернёт значение с типом float32, а не float64, а в выражениях с несколькими типами для результата будет использован тип с наивысшей точностью, то есть «np.array([3], dtype=np.float32) + np.float64(3)» вернёт значение с типом float64.
Также в проекте заменены целочисленные типы, применяемые по умолчанию на платформе Windows. На 64-разрядных системах Windows теперь применяется 64-разрядный целый тип, а на 32-разрядных — 32-разрядный (ранее использовался аналог C-типа long, а теперь эквивалент np.intp).
В NumPy 2.0.0 заменены или удалены некоторые определения в C-API, например, изменена структура PyArray_Descr. Максимальное число измерений и аргументов, выставляемое через макросы NPY_MAXDIMS и NPY_MAXARGS, увеличено до 64. Все комплексные типы переведены на использование штатных типов из спецификации C99 (cfloat_t, cdouble_t, clongdouble_t).
В NumPy 2.0.0 добавлен новый C API для создания собственных dtype, а также предложены новые упрощённые функции инициализации PyArray_ImportNumPyAPI и PyUFunc_ImportUFuncAPI.
В Python API новой версии NumPy обеспечено более явное разделение между публичными и приватными API, предложена новая структура модулей. Около 100 функций, модулей и констант вынесены из основного пространства имён «np», объявлены устаревшими или удалены.
Также в NumPy 2.0.0 почищено пространство имён np.lib. Число объектов в основном пространстве имён сокращено на 10%, а в пространстве имён numpy.lib — на 80%. Переведено в разряд приватных пространство имён numpy.core. Удалены некоторые методы из классов np.ndarray и np.generic. Создано новое пространство имён numpy.strings со строковыми операциями.
Из новых возможностей в NumPy 2.0.0 можно выделить: поддержку типов float32 и longdouble во всех функциях numpy.fft, поддержку стандартного API Array в основном пространстве имён, новое пространство имён и типы для строк переменной длины.
В рамках подготовки NumPy 2.0.0 сообществом разработчиков проекта проведена оптимизация производительности с использованием библиотек Intel x86-simd-sort и Google Highway для строковых функций sort, argsort, partition и argpartition, ускорены операции с фиксированными строками в модуле numpy.char. Также в проекте добавлен новый API opt_func_info для трассировки и интроспектирования.
Источник: habr.com