Примечания к выпуску NumPy 2.2.0#
Выпуск NumPy 2.2.0 — это быстрый выпуск, который возвращает нас к обычному циклу выпуска два раза в год. Было выполнено несколько небольших улучшений, а также работа по завершению нового StringDType и улучшению поддержки свободнопоточного Python. Основные моменты:
Новые функции
matvecиvecmat, см. ниже.Много улучшенных аннотаций.
Улучшенная поддержка нового StringDType.
Улучшена поддержка свободнопоточного Python
Исправления для f2py
Этот выпуск поддерживает версии Python 3.10-3.13.
Устаревшие функции#
_add_newdoc_ufuncтеперь устарело.ufunc.__doc__ = newdocследует использовать вместо этого.(gh-27735)
Устаревшие устаревания#
bool(np.array([]))и другие пустые массивы теперь будут вызывать ошибку. Используйтеarr.size > 0вместо проверки, имеет ли массив элементы.(gh-27160)
Примечания по совместимости#
Новые возможности#
Новые функции для матрично-векторных и векторно-матричных произведений
Были определены два новых обобщенных ufunc:
numpy.matvec- произведение матрицы на вектор, рассматривая аргументы как стеки матриц и столбцов векторов соответственно.numpy.vecmat- векторно-матричное произведение, рассматривая аргументы как столбцы векторов и матриц соответственно. Для комплексных векторов берется сопряженное значение.
Они добавляются к существующим
numpy.matmulа также дляnumpy.vecdot, который был добавлен в numpy 2.0.Обратите внимание, что
numpy.matmulникогда не берёт комплексное сопряжение, также не когда его левый вход — вектор, в то время как обаnumpy.vecdotиnumpy.vecmatберут сопряжение для комплексных векторов на левой стороне (которые считаются транспонированными, согласно физическому соглашению).(gh-25675)
np.complexfloating[T, T]теперь также может быть записано какnp.complexfloating[T](gh-27420)
UFuncs теперь поддерживают
__dict__атрибут и разрешить переопределение__doc__(либо напрямую, либо черезufunc.__dict__["__doc__"]).__dict__можно использовать для переопределения других свойств, таких как__module__или__qualname__.(gh-27735)
Параметр типа "nbit"
np.numberи его подтипы теперь по умолчаниюtyping.AnyТаким образом, средства проверки типов будут выводить аннотации, такие какx: np.floatingкакx: np.floating[Any], даже в строгом режиме.(gh-27736)
Улучшения#
The
datetime64иtimedelta64хэши теперь правильно соответствуют встроенным в PythondatetimeиtimedeltaХэши теперь оцениваются как равные даже для равных значений с разными единицами времени.(gh-14622)
Исправлен ряд проблем с приведением типов для строковых ufunc с аргументами StringDType. Смешивание StringDType и фиксированных DTypes с использованием строковых ufunc теперь должно давать гораздо более однородные результаты.
(gh-27636)
Улучшенная поддержка пустых
memmap. Ранее пустойmemmapне сработает, если не указано ненулевоеoffsetбыл установлен. Теперь массив нулевого размераmemmapподдерживается даже еслиoffset=0. Чтобы достичь этого, еслиmemmapотображается в пустой файл, этот файл дополняется одним байтом.(gh-27723)
f2py обрабатывает несколько модулей и снова экспонирует переменные#
Исправлена регрессия, позволяющая пользователям F2PY предоставлять переменные Python в модулях только с присваиваниями, а также исправлены ситуации, когда в одном исходном файле присутствуют несколько модулей.
(gh-27695)
Улучшения и изменения производительности#
Улучшено масштабирование многопоточности в сборке с свободными потоками, когда многие потоки одновременно вызывают одни и те же операции ufunc.
(gh-27896)
NumPy теперь использует быстрые при неудаче поиски атрибутов для протоколов. Это может значительно снизить накладные расходы вызовов функций или создания массивов, особенно с пользовательскими объектами Python. Наибольшие улучшения будут видны на Python 3.12 или новее.
(gh-27119)
OpenBLAS на x86_64 и i686 собран с меньшим количеством ядер. На основе тестирования выделено 5 кластеров производительности вокруг этих ядер:
PRESCOTT NEHALEM SANDYBRIDGE HASWELL SKYLAKEX.OpenBLAS в Windows линкуется без quadmath, упрощая лицензирование
Из-за регрессии в OpenBLAS на Windows, улучшения производительности при использовании нескольких потоков для OpenBLAS 0.3.26 были отменены.
(gh-27147)
NumPy теперь указывает hugepages также для больших
np.zerosвыделениями памяти в Linux. Таким образом, это должно в целом улучшить производительность.(gh-27808)
Изменения#
numpy.fixтеперь не будет выполнять приведение к типу данных с плавающей точкой для входных массивов целочисленного и булевого типа данных.(gh-26766)
Аннотации типов
numpy.float64иnumpy.complex128теперь отражают, что они также являются подтипами встроенногоfloatиcomplexтипы, соответственно. Это обновление предотвращает сообщения об ошибках статическими анализаторами типов в случаях, таких как:x: float = numpy.float64(6.28) # valid z: complex = numpy.complex128(-1j) # valid
(gh-27334)
The
reprмассивов, достаточно больших для суммирования (т.е., где элементы заменяются на...) теперь включаетshapeмассива, аналогично тому, что уже было для массивов с нулевым размером и неочевидной формой. С этим изменением форма всегда указывается, когда ее нельзя вывести из значений. Обратите внимание, что хотя записано какshape=..., этот аргумент фактически не может быть передан вnp.arrayконструктор. Если вы столкнётесь с проблемами, например, из-за неудачных тестов документации, вы можете использовать опцию печатиlegacy=2.1чтобы получить старое поведение.(gh-27482)
Вызов
__array_wrap__непосредственно на массивах NumPy или скалярах теперь работает правильно, когдаreturn_scalarпередаётся (добавлено в NumPy 2). Теперь также безопасно вызывать скаляр__array_wrap__на нескалярном результате.(gh-27807)
Обновление CI-образа musllinux и колес до 1_2 с 1_1. Это связано с тем, что 1_1 конец жизненного цикла.
(gh-27088)
Опция состояния продвижения NEP 50 удалена#
Настройки состояния продвижения NEP 50 теперь удалены. Они всегда предназначались как временное средство для тестирования. Будет выдано предупреждение, если переменная окружения установлена на что-либо, кроме NPY_PROMOTION_STATE=weak в то время как
_set_promotion_state и _get_promotion_state удаляются. В случае если код использовал _no_nep50_warning, a contextlib.nullcontext может использоваться для
его замены, когда он недоступен.
(gh-27156)