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