Примечания к выпуску NumPy 2.0.0#

NumPy 2.0.0 — первый крупный релиз с 2006 года. Это результат 11 месяцев разработки с момента последнего релиза с новыми функциями и работа 212 участников, распределённых по 1078 запросам на включение. Он содержит большое количество захватывающих новых функций, а также изменения как в Python, так и в C API.

Этот крупный выпуск включает критические изменения, которые не могли произойти в обычном минорном (функциональном) выпуске — включая нарушение ABI, изменения правил продвижения типов и изменения API, которые могли не выдавать предупреждения об устаревании в 1.26.x. Ключевые документы, связанные с адаптацией к изменениям в NumPy 2.0, в дополнение к этим примечаниям к выпуску, включают:

Основные моменты#

Основные особенности этого выпуска включают:

  • Новые возможности:

    • Новый тип данных строк переменной длины, StringDType и новый numpy.strings пространство имен с производительными ufuncs для строковых операций,

    • Поддержка float32 и longdouble во всех numpy.fft функции,

    • Поддержка стандарта array API в основном numpy пространство имён.

  • Улучшения производительности:

    • Функции сортировки (sort, argsort, partition, argpartition) были ускорены за счёт использования библиотек Intel x86-simd-sort и Google Highway и могут демонстрировать значительное (зависящее от оборудования) ускорение,

    • Поддержка macOS Accelerate и бинарные сборки для macOS >=14 со значительным улучшением производительности операций линейной алгебры на macOS и сборками, которые примерно в 3 раза меньше,

    • numpy.char операции с строками фиксированной длины были ускорены путём реализации ufuncs, которые также поддерживают StringDType в дополнение к типам данных строк фиксированной длины,

    • Новый API для трассировки и интроспекции, opt_func_info, чтобы определить, какие аппаратно-специфичные ядра доступны и будут использоваться.

    • numpy.save теперь использует протокол pickle версии 4 для сохранения массивов с dtype object, что позволяет сохранять объекты pickle размером более 4 ГБ и улучшает скорость сохранения примерно на 5% для больших массивов.

  • Улучшения Python API:

    • Четкое разделение между публичным и приватным API, с новым структура модуля, и каждая публичная функция теперь доступна в одном месте,

    • Многочисленные удаления нерекомендуемых функций и псевдонимов. Это должно упростить изучение и использование NumPy. Количество объектов в основном пространстве имён уменьшилось примерно на 10% и в numpy.lib на ~80%,

    • Канонические имена dtype и новый isdtype функция интроспекции,

  • Улучшения C API:

  • Улучшенное поведение:

    • Улучшения поведения продвижения типов были изменены путём принятия NEP 50. Это исправляет многие неожиданности пользователей относительно приведений, которые ранее часто зависели от значений данных входных массивов, а не только от их типов данных. Пожалуйста, ознакомьтесь с NEP и Руководство по переходу на NumPy 2.0 для подробностей, так как это изменение может привести к изменениям в типах выходных данных и более низкой точности результатов для операций со смешанными типами данных.

    • Тип целого числа по умолчанию в Windows теперь int64 вместо int32, соответствуя поведению на других платформах,

    • Максимальное количество измерений массива изменено с 32 до 64

  • Документация:

Кроме того, есть много изменений во внутренней структуре NumPy, включая продолжение миграции кода с C на C++, что упростит улучшение и поддержку NumPy в будущем.

Теорема «бесплатного обеда» гласит, что за все эти улучшения API и поведения, а также лучшую расширяемость в будущем, есть цена:

  1. Обратная совместимость. Существует значительное количество критических изменений как в Python, так и в C API. В большинстве случаев есть четкие сообщения об ошибках, которые сообщат пользователю, как адаптировать их код. Однако также есть изменения в поведении, для которых невозможно было дать такое сообщение об ошибке - эти случаи описаны в разделах Устаревание и Совместимость ниже, а также в Руководство по переходу на NumPy 2.0.

    Обратите внимание, что существует ruff режим для автоматического исправления многих вещей в коде Python.

  2. Критические изменения в ABI NumPy. В результате бинарные файлы пакетов, которые используют C API NumPy и были собраны для выпуска NumPy 1.xx, не будут работать с NumPy 2.0. При импорте такие пакеты увидят ImportError с сообщением о бинарной несовместимости.

    Возможно собрать бинарные файлы для NumPy 2.0, которые будут работать как с NumPy 2.0, так и с 1.x. См. Советы, специфичные для NumPy 2.0 для получения дополнительной информации.

    Все пакеты, зависящие от ABI NumPy, рекомендуется выпустить новую версию, собранную с NumPy 2.0, и проверить, что эта версия работает как с 2.0, так и с 1.26 — желательно в период между 2.0.0rc1 (который будет стабильным по ABI) и финальным выпуском 2.0.0, чтобы избежать проблем для пользователей.

Поддерживаемые версии Python для этого релиза: 3.9-3.12.

Удаления в Python API NumPy 2.0#

  • np.geterrobj, np.seterrobj и соответствующий аргумент ключевого слова ufunc extobj= были удалены. Предпочтительной заменой для всех них является использование контекстного менеджера with np.errstate():.

    (gh-23922)

  • np.cast был удалён. Буквальная замена для np.cast[dtype](arg) является np.asarray(arg, dtype=dtype).

  • np.source был удалён. Предпочтительной заменой является inspect.getsource.

  • np.lookfor был удален.

    (gh-24144)

  • numpy.who был удален. В качестве альтернативы удаленной функциональности можно использовать обозреватель переменных, доступный в IDE, таких как Spyder или Jupyter Notebook.

    (gh-24321)

  • Предупреждения и исключения, присутствующие в numpy.exceptions (например, ComplexWarning, VisibleDeprecationWarning) больше не экспонируются в основном пространстве имён.

  • Несколько нишевых перечислений, устаревших членов и функций были удалены из основного пространства имен, таких как: ERR_*, SHIFT_*, np.fastCopyAndTranspose, np.kernel_version, np.numarray, np.oldnumeric и np.set_numeric_ops.

    (gh-24316)

  • Заменен from ... import * в numpy/__init__.py с явными импортами. В результате эти элементы основного пространства имён были удалены: np.FLOATING_POINT_SUPPORT, np.FPE_*, np.NINF, np.PINF, np.NZERO, np.PZERO, np.CLIP, np.WRAP, np.WRAP, np.RAISE, np.BUFSIZE, np.UFUNC_BUFSIZE_DEFAULT, np.UFUNC_PYVALS_NAME, np.ALLOW_THREADS, np.MAXDIMS, np.MAY_SHARE_EXACT, np.MAY_SHARE_BOUNDS, add_newdoc, np.add_docstring и np.add_newdoc_ufunc.

    (gh-24357)

  • Псевдоним np.float_ был удалён. Используйте np.float64 вместо этого.

  • Псевдоним np.complex_ был удалён. Используйте np.complex128 вместо этого.

  • Псевдоним np.longfloat был удалён. Используйте np.longdouble вместо этого.

  • Псевдоним np.singlecomplex был удалён. Используйте np.complex64 вместо этого.

  • Псевдоним np.cfloat был удалён. Используйте np.complex128 вместо этого.

  • Псевдоним np.longcomplex был удалён. Используйте np.clongdouble вместо этого.

  • Псевдоним np.clongfloat был удалён. Используйте np.clongdouble вместо этого.

  • Псевдоним np.string_ был удалён. Используйте np.bytes_ вместо этого.

  • Псевдоним np.unicode_ был удалён. Используйте np.str_ вместо этого.

  • Псевдоним np.Inf был удалён. Используйте np.inf вместо этого.

  • Псевдоним np.Infinity был удалён. Используйте np.inf вместо этого.

  • Псевдоним np.NaN был удалён. Используйте np.nan вместо этого.

  • Псевдоним np.infty был удалён. Используйте np.inf вместо этого.

  • Псевдоним np.mat был удалён. Используйте np.asmatrix вместо этого.

  • np.issubclass_ был удален. Используйте issubclass встроенная функция вместо.

  • np.asfarray был удалён. Используйте np.asarray с правильным dtype вместо этого.

  • np.set_string_function был удалён. Используйте np.set_printoptions вместо этого с форматировщиком для пользовательской печати объектов NumPy.

  • np.tracemalloc_domain теперь доступен только из np.lib.

  • np.recfromcsv и np.recfromtxt были удалены из основного пространства имён. Используйте np.genfromtxt с разделителем-запятой вместо.

  • np.issctype, np.maximum_sctype, np.obj2sctype, np.sctype2char, np.sctypes, np.issubsctype были полностью удалены из основного пространства имен без замены, так как они были нишевыми элементами.

  • Устаревший np.deprecate и np.deprecate_with_doc — это количество элементов в выборке. DeprecationWarning вместо этого.

  • Устаревший np.safe_eval был удален из основного пространства имен. Используйте ast.literal_eval вместо этого.

    (gh-24376)

  • np.find_common_type был удалён. Используйте numpy.promote_types или numpy.result_type вместо этого. Для достижения семантики scalar_types аргумент, используйте numpy.result_type и передать 0, 0.0, или 0j как скаляр Python вместо.

  • np.round_ был удалён. Используйте np.round вместо этого.

  • np.nbytes был удалён. Используйте np.dtype().itemsize вместо этого.

    (gh-24477)

  • np.compare_chararrays был удален из основного пространства имен. Используйте np.char.compare_chararrays вместо этого.

  • The charrarray в основном пространстве имён устарела. Её можно импортировать без предупреждения об устаревании из np.char.chararray на данный момент, но мы планируем полностью устареть и удалить chararray в будущем.

  • np.format_parser был удален из основного пространства имен. Используйте np.rec.format_parser вместо этого.

    (gh-24587)

  • Поддержка семи строковых псевдонимов типов данных была удалена из np.dtype: int0, uint0, void0, object0, str0, bytes0 и bool8.

    (gh-24807)

  • Экспериментальный numpy.array_api подмодуль был удалён. Используйте основной numpy пространство имён для обычного использования вместо этого, или отдельное array-api-strict пакет для случая использования тестирования на соответствие, для которого numpy.array_api в основном использовался.

    (gh-25911)

__array_prepare__ удален#

Универсальные функции, вызываемые __array_prepare__ перед выполнением вычислений для обычных вызовов ufunc (не обобщённых ufunc, редукций и т.д.). Функция также вызывалась вместо __array_wrap__ на результатах некоторых функций линейной алгебры.

Теперь он удалён. Если вы его используете, перейдите на __array_ufunc__ или полагаться на __array_wrap__ который вызывается с контекстом во всех случаях, хотя только после заполнения результирующего массива. В этих путях выполнения кода, __array_wrap__ теперь будет передаваться базовый класс, а не подкласс массива.

(gh-25105)

Устаревшие функции#

  • np.compat был устаревшим, так как Python 2 больше не поддерживается.

  • numpy.int8 и аналогичные классы больше не будут поддерживать преобразование выходящих за пределы целых чисел Python в целочисленные массивы. Например, преобразование 255 в int8 не вернет -1. numpy.iinfo(dtype) может использоваться для проверки машинных ограничений типов данных. Например, np.iinfo(np.uint16) возвращает min = 0 и max = 65535.

    np.array(value).astype(dtype) даст желаемый результат.

  • np.safe_eval был объявлен устаревшим. ast.literal_eval следует использовать вместо.

    (gh-23830)

  • np.recfromcsv, np.recfromtxt, np.disp, np.get_array_wrap, np.maximum_sctype, np.deprecate и np.deprecate_with_doc были устаревшими.

    (gh-24154)

  • np.trapz был объявлен устаревшим. Используйте np.trapezoid или scipy.integrate функция вместо.

  • np.in1d был объявлен устаревшим. Используйте np.isin вместо этого.

  • Псевдоним np.row_stack был объявлен устаревшим. Используйте np.vstack напрямую.

    (gh-24445)

  • __array_wrap__ теперь передается arr, context, return_scalar и поддержка реализаций, не принимающих все три, устарела. Его сигнатура должна быть __array_wrap__(self, arr, context=None, return_scalar=False)

    (gh-25409)

  • Массивы 2-мерных векторов для np.cross были объявлены устаревшими. Используйте массивы 3-мерных векторов вместо них.

    (gh-24818)

  • np.dtype("a") псевдоним для np.dtype(np.bytes_) был устаревшим. Используйте np.dtype("S") alias вместо.

    (gh-24854)

  • Использование именованных аргументов x и y с функциями assert_array_equal и assert_array_almost_equal был объявлен устаревшим. Передавайте первые два аргумента как позиционные аргументы.

    (gh-24978)

numpy.fft устаревания для n-D преобразований с None в аргументах#

Используя fftn, ifftn, rfftn, irfftn, fft2, ifft2, rfft2 или irfft2 с s параметр установлен в значение, которое не None и axes параметр установлен в None был устаревшим, в соответствии со стандартом API массивов. Чтобы сохранить текущее поведение, передайте последовательность [0, …, k-1] в axes для массива размерности k.

Кроме того, передача массива в s который содержит None значения устарели, так как параметр документирован для приёма последовательности целых чисел как в документации NumPy, так и в спецификации Array API. Чтобы использовать поведение по умолчанию соответствующего 1-D преобразования, передайте значение, соответствующее умолчанию для его n параметр. Чтобы использовать поведение по умолчанию для каждой оси, s аргумент может быть опущен.

(gh-25495)

np.linalg.lstsq теперь по умолчанию новый rcond значение#

lstsq теперь использует новое значение rcond, равное машинной точности, умноженной на max(M, N)Ранее использовалась машинная точность, но выдавалось предупреждение FutureWarning, чтобы уведомить, что это изменение произойдет в будущем. Старое поведение все еще можно получить, передав rcond=-1.

(gh-25721)

Устаревшие устаревания#

  • The np.core.umath_tests подмодуль был удален из публичного API. (Устарело в NumPy 1.15)

    (gh-23809)

  • The PyDataMem_SetEventHook период устаревания истёк, и функция удалена. Используйте tracemalloc и np.lib.tracemalloc_domain домен. (Устарело в NumPy 1.23)

    (gh-23921)

  • Устаревание set_numeric_ops и функции C PyArray_SetNumericOps и PyArray_GetNumericOps истёк, и функции удалены. (Устарело в NumPy 1.16)

    (gh-23998)

  • The fasttake, fastclip, и fastputmask ArrFuncs устаревание теперь завершено.

  • Устаревшая функция fastCopyAndTranspose и его C-аналог теперь удалены.

  • Устаревание PyArray_ScalarFromObject теперь завершён.

    (gh-24312)

  • np.msort был удалён. Для замены, np.sort(a, axis=0) следует использовать вместо.

    (gh-24494)

  • np.dtype(("f8", 1) теперь будет возвращать dtype подмассива формы 1, а не неподмассивный.

    (gh-25761)

  • Присваивание .data атрибут ndarray запрещён и будет вызывать исключение.

  • np.binary_repr(a, width) вызовет исключение, если ширина слишком мала.

  • Используя NPY_CHAR в PyArray_DescrFromType() вызовет исключение, используйте NPY_STRING NPY_UNICODE, или NPY_VSTRING вместо этого.

    (gh-25794)

Примечания по совместимости#

loadtxt и genfromtxt изменена кодировка по умолчанию#

loadtxt и genfromtxt теперь оба по умолчанию encoding=None которые в основном могут изменять способ converters работать. Теперь они будут переданы str вместо bytes. Передайте кодировку явно, чтобы всегда получать новое или старое поведение. Для genfromtxt изменение также означает, что возвращаемые значения теперь будут строками Unicode, а не байтами.

(gh-25158)

f2py заметки о совместимости#

  • f2py больше не будет принимать неоднозначные -m и .pyf CLI комбинации. Когда более одной .pyf файл передан, возникает ошибка. Когда оба -m и .pyf передаётся, выдаётся предупреждение и -m предоставленное имя игнорируется.

    (gh-25181)

  • The f2py.compile() вспомогательная функция была удалена, поскольку она приводила к утечке памяти, была помечена как экспериментальная в течение нескольких лет и была реализована как тонкая subprocess.run обертка. Это также было одним из узких мест тестирования. См. gh-25122 для полного обоснования. Он также использовал несколько np.distutils функции, которые слишком хрупки для переноса на работу с meson.

  • Пользователям рекомендуется заменить вызовы f2py.compile с вызовами subprocess.run("python", "-m", "numpy.f2py",... вместо этого, и использовать переменные окружения для взаимодействия с meson. Нативные файлы также являются опцией.

    (gh-25193)

Незначительные изменения в поведении функций сортировки#

Из-за алгоритмических изменений и использования кода SIMD функции сортировки с методами, которые не являются стабильными, могут возвращать несколько иные результаты в версии 2.0.0 по сравнению с 1.26.x. Это включает метод по умолчанию argsort и argpartition.

Устранена неоднозначность при трансляции в np.solve#

Правила трансляции для np.solve(a, b) были неоднозначными, когда b имел на 1 измерение меньше, чем a. Это было исправлено обратно несовместимым способом и теперь соответствует Array API. Старое поведение можно восстановить, используя np.solve(a, b[..., None])[..., 0].

(gh-25914)

Изменённое представление для Polynomial#

Метод представления для Polynomial был обновлен для включения домена в представление. Простое текстовое и латексное представления теперь согласованы. Например, вывод str(np.polynomial.Polynomial([1, 1], domain=[.1, .2])) раньше был 1.0 + 1.0 xDeveloper-Ecosystem-Engineering 1.0 + 1.0 (-3.0000000000000004 + 20.0 x).

(gh-21760)

Изменения в C API#

  • The PyArray_CGT, PyArray_CLT, PyArray_CGE, PyArray_CLE, PyArray_CEQ, PyArray_CNE макросы были удалены.

  • PyArray_MIN и PyArray_MAX были перемещены из ndarraytypes.h to npy_math.h.

    (gh-24258)

  • C API для работы с numpy.dtypes.StringDType массивов был раскрыт. Это включает функции для захвата и освобождения мьютексов, которые блокируют доступ к строковым данным, а также для упаковки и распаковки UTF-8 потоков байтов из записей массива.

  • NPY_NTYPES был переименован в NPY_NTYPES_LEGACY поскольку он не включает новые встроенные типы данных NumPy. В частности, новый тип данных строк, вероятно, не будет корректно работать с кодом, обрабатывающим устаревшие типы данных.

    (gh-25347)

  • C-API теперь экспортирует только статические встроенные версии функций для доступа к массивам (ранее это зависело от использования «устаревшего API»). Хотя мы не рекомендуем этого, поля структур по-прежнему можно использовать напрямую.

    (gh-25789)

  • NumPy теперь определяет PyArray_Pack установить отдельный адрес памяти. В отличие от PyArray_SETITEM эта функция эквивалентна установке отдельного элемента массива и не требует ввода массива NumPy.

    (gh-25954)

  • The ->f слот был удален из PyArray_Descr. Если вы используете этот слот, замените доступ к нему на PyDataType_GetArrFuncs (см. его документацию и Руководство по переходу на NumPy 2.0). В некоторых случаях использование других функций, таких как PyArray_GETITEM могут быть альтернативами.

  • PyArray_GETITEM и PyArray_SETITEM теперь требуют импорта таблицы API NumPy для использования и больше не определены в ndarraytypes.h.

    (gh-25812)

  • Из-за зависимостей времени выполнения определение функциональности доступа к флагам dtype было перемещено из numpy/ndarraytypes.h и доступен только после включения numpy/ndarrayobject.h так как требует import_array(). Это включает PyDataType_FLAGCHK, PyDataType_REFCHK и NPY_BEGIN_THREADS_DESCR.

  • Флаги dtype на PyArray_Descr теперь должен быть доступен через PyDataType_FLAGS встроенная функция для совместимости с версиями 1.x и 2.x. Эта функция определена в npy_2_compat.h для разрешения обратного портирования. Большинство или все пользователи должны использовать PyDataType_FLAGCHK который доступен в версии 1.x и не требует обратного портирования. Пользователям Cython следует использовать Cython 3. В противном случае доступ будет осуществляться через Python, если они не используют PyDataType_FLAGCHK вместо этого.

    (gh-25816)

Функциональность работы с датой и временем, доступная в C API и Cython-биндингах#

Функции NpyDatetime_ConvertDatetime64ToDatetimeStruct, NpyDatetime_ConvertDatetimeStructToDatetime64, NpyDatetime_ConvertPyDateTimeToDatetimeStruct, NpyDatetime_GetDatetimeISO8601StrLen, NpyDatetime_MakeISO8601Datetime, и NpyDatetime_ParseISO8601Datetime были добавлены в C API для облегчения преобразования между строками, датами Python и датами NumPy в внешних библиотеках.

(gh-21199)

Константная корректность для обобщенного C API универсальных функций#

Функции C API NumPy для создания обобщённых уфункций (PyUFunc_FromFuncAndData, PyUFunc_FromFuncAndDataAndSignature, PyUFunc_FromFuncAndDataAndSignatureAndIdentity) принимают types и data аргументы, которые не изменяются внутренними механизмами NumPy. Как name и doc аргументы, сторонние модули расширения Python, вероятно, предоставляют эти аргументы из статических констант. Аргумент types и data аргументы теперь являются const-корректными: они объявлены как const char *types и void *const *data, соответственно. C-код не должен быть затронут, но C++ код может быть.

(gh-23847)

Большие NPY_MAXDIMS и NPY_MAXARGS, NPY_RAVEL_AXIS введен#

NPY_MAXDIMS теперь равно 64, возможно, стоит пересмотреть его использование. Обычно это используется в стековом выделении памяти, где увеличение должно быть безопасным. Однако мы рекомендуем в целом убрать любое использование NPY_MAXDIMS и NPY_MAXARGS чтобы в конечном итоге позволить полностью удалить ограничение. Для вспомогательной функции преобразования и функций C-API, зеркалирующих Python-функции, таких как take, NPY_MAXDIMS использовалось для обозначения axis=None. Такое использование должно быть заменено на NPY_RAVEL_AXIS. См. также Увеличенное максимальное количество измерений.

(gh-25149)

NPY_MAXARGS не постоянный и PyArrayMultiIterObject изменение размера#

Поскольку NPY_MAXARGS был увеличен, теперь это константа времени выполнения, а не константа времени компиляции. Мы ожидаем, что почти ни один пользователь не заметит этого. Но если используется для выделения стека, теперь это должно быть заменено пользовательской константой с помощью NPY_MAXARGS как дополнительную проверку во время выполнения.

The sizeof(PyArrayMultiIterObject) больше не включает полный размер объекта. Мы ожидаем, что никто не заметит это изменение. Оно было необходимо для избежания проблем с Cython.

(gh-25271)

Необходимые изменения для пользовательских устаревших типов данных#

Для улучшения наших DTypes, к сожалению, необходимо нарушить ABI, что требует некоторых изменений для типов данных, зарегистрированных с помощью PyArray_RegisterDataType. Пожалуйста, ознакомьтесь с документацией PyArray_RegisterDataType о том, как адаптировать ваш код и обеспечить совместимость с версиями 1.x и 2.x.

(gh-25792)

Новый публичный API для типов данных#

C-реализация DType API NEP 42 теперь публична. Хотя DType API доставлялся в NumPy несколько версий, он был доступен только в сессиях с установленной специальной переменной окружения. Теперь можно создавать пользовательские DTypes вне NumPy, используя новый DType API и обычный import_array() механизм импорта C API numpy.

См. Пользовательские типы данных для получения дополнительных сведений об API. Как всегда с новой функцией, пожалуйста, сообщайте о любых ошибках, с которыми вы столкнетесь при реализации или использовании нового DType. Вероятно, что нижестоящий C-код, работающий с dtypes, потребует обновления для корректной работы с новыми DTypes.

(gh-25754)

Новые функции импорта C-API#

Мы теперь добавили PyArray_ImportNumPyAPI и PyUFunc_ImportUFuncAPI как статические встроенные функции для импорта таблиц NumPy C-API. Новые функции имеют два преимущества перед import_array и import_ufunc:

  • Они проверяют, был ли импорт уже выполнен, и являются легковесными, если нет, позволяя добавлять их осмотрительно (хотя это не предпочтительно в большинстве случаев).

  • Старые механизмы были макросами, а не функциями, которые включали return оператор.

The PyArray_ImportNumPyAPI() функция включена в npy_2_compat.h для более простого обратного портирования.

(gh-25866)

Доступ к информации о структурированном dtype через функции#

Поля структуры dtype c_metadata, names, fields, и subarray теперь должны быть доступны через новые функции с теми же именами, такие как PyDataType_NAMESПрямой доступ к полям недопустим, так как они существуют не для всех PyArray_Descr экземпляры. metadata поле сохраняется, но макроверсия также должна быть предпочтительной.

(gh-25802)

Дескриптор elsize и alignment доступ#

Если не компилировать только с поддержкой NumPy 2, elsize и alignment поля теперь должны быть доступны через PyDataType_ELSIZE, PyDataType_SET_ELSIZE, и PyDataType_ALIGNMENT. В случаях, когда дескриптор прикреплен к массиву, мы рекомендуем использовать PyArray_ITEMSIZE поскольку он существует во всех версиях NumPy. Пожалуйста, смотрите Структура PyArray_Descr была изменена для получения дополнительной информации.

(gh-25943)

Удаления в C API NumPy 2.0#

  • npy_interrupt.h и соответствующие макросы, такие как NPY_SIGINT_ON были удалены. Мы рекомендуем запрашивать PyErr_CheckSignals() или PyOS_InterruptOccurred() периодически (это в настоящее время требует удержания GIL).

  • The noprefix.h заголовок был удалён. Замените отсутствующие символы их префиксными аналогами (обычно добавленными) NPY_ или npy_).

    (gh-23919)

  • PyUFunc_GetPyVals, PyUFunc_handlefperr, и PyUFunc_checkfperr были удалены. Если необходимо, новая обратно совместимая функция для вызова ошибок с плавающей точкой может быть восстановлена. Причина удаления: нет известных пользователей, и функции сделали бы with np.errstate() исправления гораздо сложнее).

    (gh-23922)

  • The numpy/old_defines.h который был частью API, устаревшего с NumPy 1.7, был удален. Это удаляет макросы вида PyArray_CONSTANT. replace_old_macros.sed скрипт может быть полезен для их преобразования в NPY_CONSTANT версия.

    (gh-24011)

  • The legacy_inner_loop_selector член структуры ufunc удалён для упрощения улучшений системы диспетчеризации. Неизвестны пользователи, переопределяющие или напрямую обращающиеся к этому члену.

    (gh-24271)

  • NPY_INTPLTR был удалён, чтобы избежать путаницы (см. intp переопределение).

    (gh-24888)

  • Расширенная индексация MapIter и связанный API был удалён. Публичная (настоящая) часть не была хорошо протестирована и имела только одного известного пользователя (Theano). Сделать её приватной упростит улучшения для ускорения ufunc.at, сделать расширенную индексацию более поддерживаемой, и было важно для увеличения максимального числа измерений массивов до 64. Пожалуйста, сообщите нам, если этот API важен для вас, чтобы мы могли найти решение вместе.

    (gh-25138)

  • The NPY_MAX_ELSIZE макрос был удалён, так как он только отражал встроенные числовые типы и не служил внутренним целям.

    (gh-25149)

  • PyArray_REFCNT и NPY_REFCOUNT удалены. Используйте Py_REFCNT вместо этого.

    (gh-25156)

  • PyArrayFlags_Type и PyArray_NewFlagsObject а также PyArrayFlagsObject теперь являются приватными. Известных случаев использования нет; используйте Python API при необходимости.

  • PyArray_MoveInto, PyArray_CastTo, PyArray_CastAnyTo удалены использовать PyArray_CopyInto и если абсолютно необходимо PyArray_CopyAnyInto (последнее выполняет плоское копирование).

  • PyArray_FillObjectArray удален, его единственное реальное применение было для реализации np.empty. Создайте новый пустой массив или используйте PyArray_FillWithScalar() (уменьшает счетчики ссылок существующих объектов).

  • PyArray_CompareUCS4 и PyArray_CompareString удаляются. Используйте стандартные функции сравнения строк C.

  • PyArray_ISPYTHON удален, так как он вводит в заблуждение, не имеет известных случаев использования и легко заменяется.

  • PyArray_FieldNames удалён, так как неясно, для чего он может быть полезен. Он также имеет некорректную семантику в некоторых возможных случаях использования.

  • PyArray_TypestrConvert удален, так как кажется неправильным названием и вряд ли будет использоваться кем-либо. Если вы знаете размер или ограничены несколькими типами, просто используйте его явно, иначе используйте строки Python.

    (gh-25292)

  • PyDataType_GetDatetimeMetaData удален, он фактически ничего не делал, по крайней мере, с NumPy 1.7.

    (gh-25802)

  • PyArray_GetCastFunc удалён. Обратите внимание, что пользовательские устаревшие типы данных всё ещё могут предоставлять castfunc в качестве реализации, но любой доступ к ним теперь удалён. Причина в том, что NumPy не использовал их внутренне в течение многих лет. Если вы используете простые числовые типы, пожалуйста, просто используйте приведение C напрямую. Если вам требуется альтернатива, сообщите нам, чтобы мы могли создать новый API, такой как PyArray_CastBuffer() который может использовать старые или новые функции приведения в зависимости от версии NumPy.

    (gh-25161)

Новые возможности#

np.add был расширен для работы с unicode и bytes dtypes.#

Новый bitwise_count функция#

Эта новая функция подсчитывает количество 1-битов в числе. bitwise_count работает со всеми целочисленными типами numpy и целочисленными объектами.

>>> a = np.array([2**i - 1 for i in range(16)])
>>> np.bitwise_count(a)
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15],
      dtype=uint8)

(gh-19355)

Поддержка macOS Accelerate, включая ILP64#

Добавлена поддержка обновленной библиотеки Accelerate BLAS/LAPACK, включая поддержку ILP64 (64-битные целые числа), в macOS 13.3+. Это приносит поддержку arm64 и значительное улучшение производительности до 10 раз для часто используемых операций линейной алгебры. Когда Accelerate выбран во время сборки или если явный выбор библиотеки BLAS не выполнен, версия 13.3+ будет автоматически использована, если доступна.

(gh-24053)

Также доступны бинарные сборки. На macOS >=14.0 пользователи, устанавливающие NumPy из PyPI, получат сборки, построенные на Accelerate, а не на OpenBLAS.

(gh-25255)

Опция использования весов для функций квантиля и процентиля#

A weights ключевое слово теперь доступно для quantile, percentile, nanquantile и nanpercentile. Только method="inverted_cdf" поддерживает веса.

(gh-24254)

Улучшенное отслеживание оптимизации процессора#

Доступен новый механизм трассировки, который позволяет отслеживать включенные цели для каждой оптимизированной функции (т.е. использующей аппаратно-специфичные SIMD инструкции) в библиотеке NumPy. С этим улучшением становится возможным точно отслеживать включенные цели диспетчеризации CPU для диспетчеризованных функций.

Новая функция с именем opt_func_info был добавлен в новое пространство имён numpy.lib.introspect, предлагая эту возможность трассировки. Эта функция позволяет получать информацию о включенных целях на основе имен функций и сигнатур типов данных.

(gh-24420)

Новый бэкенд Meson для f2py#

f2py в режиме компиляции (т.е. f2py -c) теперь принимает --backend meson опции. Это опция по умолчанию для Python >=3.12. Для более старых версий Python, f2py по-прежнему будет по умолчанию --backend distutils.

Для поддержки этого в реалистичных случаях использования, в режиме компиляции f2py принимает --dep флаг один или несколько раз, который соответствует dependency() вызывает в meson бэкенд, и ничего не делает в distutils бэкенд.

Нет изменений для пользователей f2py только как генератор кода, т.е. без -c.

(gh-24532)

bind(c) поддержка для f2py#

Как функции, так и подпрограммы могут быть аннотированы с помощью bind(c). f2py будет обрабатывать как правильное сопоставление типов, так и сохранение уникальной метки для других C-интерфейсов.

Примечание: bind(c, name = 'routine_name_other_than_fortran_routine') не соблюдается f2py привязки по дизайну, поскольку bind(c) с name предназначен для гарантии только одинакового имени в C и Fortran, а не в Python и Fortran.

(gh-24555)

Новый strict опция для нескольких тестовых функций#

The strict ключевое слово теперь доступно для assert_allclose, assert_equal, и assert_array_less. Установка strict=True отключит поведение вещания для скаляров и гарантирует, что входные массивы имеют одинаковый тип данных.

(gh-24680, gh-24770, gh-24775)

Добавить np.core.umath.find и np.core.umath.rfind UFuncs#

Добавить два find и rfind UFuncs, которые работают с unicode или байтовыми строками и используются в np.char. Они работают аналогично str.find и str.rfind.

(gh-24868)

diagonal и trace для numpy.linalg#

numpy.linalg.diagonal и numpy.linalg.trace были добавлены, которые являются совместимыми с стандартом API массивов вариантами numpy.diagonal и numpy.trace. Они отличаются выбором оси по умолчанию, которая определяет двумерные подмассивы.

(gh-24887)

Новый long и ulong dtypes#

numpy.long и numpy.ulong были добавлены как целые числа NumPy, соответствующие C long и unsigned longДо NumPy 1.24, numpy.long был псевдонимом для Python int.

(gh-24922)

svdvals для numpy.linalg#

numpy.linalg.svdvals был добавлен. Он вычисляет сингулярные значения для (стека) матриц. Выполнение np.svdvals(x) это то же самое, что вызов np.svd(x, compute_uv=False, hermitian=False). Эта функция совместима со стандартом array API.

(gh-24940)

Новый isdtype функция#

numpy.isdtype был добавлен для предоставления канонического способа классификации dtype NumPy в соответствии со стандартом array API.

(gh-25054)

Новый astype функция#

numpy.astype был добавлен для предоставления совместимой со стандартом API массивов альтернативы numpy.ndarray.astype метод.

(gh-25079)

Псевдонимы функций, совместимых с Array API#

13 псевдонимов для существующих функций были добавлены для улучшения совместимости со стандартом array API:

  • Тригонометрия: acos, acosh, asin, asinh, atan, atanh, atan2.

  • Побитовые операции: bitwise_left_shift, bitwise_invert, bitwise_right_shift.

  • Разное: concat, permute_dims, pow.

  • В numpy.linalg: tensordot, matmul.

(gh-25086)

Новый unique_* функции#

The unique_all, unique_counts, unique_inverse, и unique_values были добавлены функции. Они предоставляют функциональность unique с разными наборами флагов. Они совместимы со стандартом Array API, и поскольку количество возвращаемых массивов не зависит от значений входных аргументов, их легче компилировать JIT.

(gh-25088)

Поддержка транспонирования матриц для ndarrays#

NumPy теперь предлагает поддержку вычисления матричной транспозиции массива (или стека массивов). Матричная транспозиция эквивалентна замене последних двух осей массива. Оба np.ndarray и np.ma.MaskedArray теперь предоставляют .mT атрибут, и есть соответствующий новый numpy.matrix_transpose функция.

(gh-23762)

Функции, совместимые с Array API, для numpy.linalg#

Шесть новых функций и два псевдонима были добавлены для улучшения совместимости со стандартом Array API для numpy.linalg:

  • numpy.linalg.matrix_norm - Вычисляет матричную норму матрицы (или стека матриц).

  • numpy.linalg.vector_norm - Вычисляет векторную норму вектора (или пакета векторов).

  • numpy.vecdot - Вычисляет (векторное) скалярное произведение двух массивов.

  • numpy.linalg.vecdot - Псевдоним для numpy.vecdot.

  • numpy.linalg.matrix_transpose - Псевдоним для numpy.matrix_transpose.

    (gh-25155)

  • numpy.linalg.outer была добавлена. Она вычисляет внешнее произведение двух векторов. Отличается от numpy.outer принимая только одномерные массивы. Эта функция совместима со стандартом API массивов.

    (gh-25101)

  • numpy.linalg.cross был добавлен. Он вычисляет векторное произведение двух (массивов) трёхмерных векторов. Он отличается от numpy.cross принимая только трёхмерные векторы. Эта функция совместима со стандартом array API.

    (gh-25145)

A correction аргумент для var и std#

A correction аргумент был добавлен в var и std, который является совместимой с стандартом Array API альтернативой ddof. Поскольку оба аргумента служат схожей цели, только один из них может быть предоставлен одновременно.

(gh-25169)

ndarray.device и ndarray.to_device#

An ndarray.device атрибут и ndarray.to_device метод был добавлен в numpy.ndarray для совместимости со стандартом API массивов.

Дополнительно, device аргументы только по ключевым словам были добавлены в: asarray, arange, empty, empty_like, eye, full, full_like, linspace, ones, ones_like, zeros, и zeros_like.

Для всех этих новых аргументов только device="cpu" поддерживается.

(gh-25233)

StringDType был добавлен в NumPy#

Мы добавили новый тип данных строки с переменной шириной в кодировке UTF-8, реализующий «массив NumPy из строк Python», включая поддержку пользовательского маркера пропущенных данных. Он предназначен как прямая замена для массивов строк Python и маркеров пропущенных данных с использованием dtype object. См. NEP 55 и документация для получения дополнительной информации.

(gh-25347)

Новые ключевые слова для cholesky и pinv#

The upper и rtol ключевые слова были добавлены в numpy.linalg.cholesky и numpy.linalg.pinv, соответственно, для улучшения совместимости со стандартом API массивов.

Для pinv, если ни rcond ни rtol указан, то rcondиспользуется по умолчанию. Мы планируем устаревание и удаление rcond в будущем.

(gh-25388)

Новые ключевые слова для sort, argsort и linalg.matrix_rank#

Были добавлены новые ключевые параметры для улучшения совместимости со стандартом API массивов:

(gh-25437)

Новый numpy.strings пространство имён для строковых универсальных функций#

NumPy теперь реализует некоторые строковые операции как ufuncs. Старый np.char пространство имен все еще доступно, и, где возможно, функции манипуляции строками в этом пространстве имен были обновлены для использования новых ufunc, что существенно улучшило их производительность.

По возможности мы рекомендуем обновлять код для использования функций в np.strings вместо np.char. В будущем мы можем объявить устаревшим np.char в пользу np.strings.

(gh-25463)

numpy.fft поддержка различных точностей и вычислений на месте#

Различные подпрограммы БПФ в numpy.fft теперь выполняют вычисления нативно с точностью float, double или long double, в зависимости от входной точности, вместо того чтобы всегда вычислять с точностью double. Следовательно, вычисления теперь будут менее точными для single и более точными для long double. Тип данных выходного массива теперь будет соответствующим образом скорректирован.

Кроме того, все подпрограммы БПФ получили out аргумент, который можно использовать для вычислений на месте.

(gh-25536)

поддержка configtool и pkg-config#

Новый numpy-config Доступен CLI-скрипт, который можно запросить для получения версии NumPy и флагов компиляции, необходимых для использования C API NumPy. Это позволит системам сборки лучше поддерживать использование NumPy в качестве зависимости. Также, numpy.pc файл pkg-config теперь включён в Numpy. Чтобы найти его местоположение для использования с PKG_CONFIG_PATH, используйте numpy-config --pkgconfigdir.

(gh-25730)

Поддержка стандарта Array API в основном пространстве имен#

Основной numpy пространство имён теперь поддерживает стандарт Array API. См. Совместимость со стандартом Array API подробности.

(gh-25911)

Улучшения#

Строки теперь поддерживаются any, all, и логические универсальные функции.#

Целочисленные последовательности как аргумент shape для memmap#

numpy.memmap теперь могут быть созданы с любой целочисленной последовательностью в качестве shape аргумент, такой как список или массив numpy целых чисел. Ранее только типы tuple и int могли использоваться без вызова ошибки.

(gh-23729)

errstate теперь быстрее и безопасно для контекста#

The numpy.errstate менеджер контекста/декоратор теперь быстрее и безопаснее. Ранее он не был безопасен для контекста и имел (редкие) проблемы с потокобезопасностью.

(gh-23936)

Скорость быстрой сортировки на AArch64 улучшена за счёт использования VQSort от Highway#

Первое внедрение библиотеки Google Highway с использованием VQSort на AArch64. Время выполнения улучшено до 16 раз в некоторых случаях, см. PR для результатов тестов. Расширение на другие платформы будет выполнено в будущем.

(gh-24018)

Комплексные типы - базовый тип C изменяется#

  • Базовые типы C для всех комплексных типов NumPy были изменены на использование комплексных типов C99.

  • Хотя это изменение не влияет на расположение в памяти комплексных типов, оно изменяет API, используемый для прямого получения или записи действительной или мнимой части комплексного числа, поскольку прямой доступ к полям (как в c.real или c.imag) больше не является опцией. Теперь вы можете использовать утилиты, предоставленные в numpy/npy_math.h для выполнения этих операций, например:

    npy_cdouble c;
    npy_csetreal(&c, 1.0);
    npy_csetimag(&c, 0.0);
    printf("%d + %di\n", npy_creal(c), npy_cimag(c));
    
  • Для облегчения совместимости между версиями, эквивалентные макросы и слой совместимости были добавлены, которые могут использоваться зависимыми пакетами для продолжения поддержки как NumPy 1.x, так и 2.x. См. Поддержка комплексных чисел для получения дополнительной информации.

  • numpy/npy_common.h теперь включает complex.h, что означает, что complex теперь является зарезервированным ключевым словом.

(gh-24085)

iso_c_binding поддержка и улучшенные общие блоки для f2py#

Ранее пользователям приходилось определять свои собственные пользовательские f2cmap файл для использования сопоставлений типов, определенных Fortran2003 iso_c_binding встроенный модуль. Эти карты типов теперь нативно поддерживаются f2py

(gh-24555)

f2py теперь обрабатывает common блоки, которые имеют kind спецификации из модулей. Это дополнительно расширяет применимость встроенных функций, таких как iso_fortran_env и iso_c_binding.

(gh-25186)

Вызов str автоматически на третьем аргументе функций, таких как assert_equal#

Третий аргумент для функций, таких как assert_equal теперь имеет str вызывается на нём автоматически. Таким образом, он имитирует встроенный assert оператор, где assert_equal(a, b, obj) работает как assert a == b, obj.

(gh-24877)

Поддержка массивоподобных объектов atol/rtol в isclose, allclose#

Ключевые слова atol и rtol в isclose и allclose теперь принимают как скаляры, так и массивы. Массив, если он задан, должен транслироваться к формам первых двух аргументов массива.

(gh-24878)

Согласованные сообщения об ошибках в тестовых функциях#

Ранее, некоторые numpy.testing утверждения печатали сообщения, которые ссылались на фактические и желаемые результаты как x и y. Теперь эти значения последовательно называются ACTUAL и DESIRED.

(gh-24931)

N-мерные преобразования FFT позволяют s[i] == -1#

The fftn, ifftn, rfftn, irfftn, fft2, ifft2, rfft2 и irfft2 функции теперь используют весь входной массив вдоль оси i if s[i] == -1в соответствии со стандартом Array API.

(gh-25495)

Защитить PyArrayScalar_VAL и PyUnicodeScalarObject для ограниченного API#

PyUnicodeScalarObject содержит PyUnicodeObject, который недоступен при использовании Py_LIMITED_API. Добавить защиту, чтобы скрыть это и, следовательно, также сделать PyArrayScalar_VAL макрос скрыт.

(gh-25531)

Изменения#

  • np.gradient() теперь возвращает кортеж вместо списка, делая возвращаемое значение неизменяемым.

    (gh-23861)

  • Будучи полностью контекстно- и потокобезопасным, np.errstate может быть введён только один раз сейчас.

  • np.setbufsize теперь привязан к np.errstate(): оставляя np.errstate контекст также сбросит bufsize.

    (gh-23936)

  • Новый публичный np.lib.array_utils был введен подмодуль, и он в настоящее время содержит три функции: byte_bounds (перемещено из np.lib.utils), normalize_axis_tuple и normalize_axis_index.

    (gh-24540)

  • Ввести numpy.bool как новое каноническое имя для булевого dtype NumPy, и сделать numpy.bool_ его псевдоним. Обратите внимание, что до NumPy 1.24, np.bool был псевдонимом для встроенной функции Python bool. Новое имя способствует совместимости со стандартом API массивов и является более интуитивным названием.

    (gh-25080)

  • The dtype.flags значение ранее хранилось как знаковое целое число. Это означает, что флаг выравнивания dtype struct приводил к установке отрицательных флагов (-128 вместо 128). Теперь этот флаг хранится без знака (положительный). Код, который проверяет флаги вручную, может потребовать адаптации. Это может включать код, скомпилированный с Cython 0.29.x.

    (gh-25816)

Представление скаляров NumPy изменилось#

В соответствии с NEP 51, скалярное представление было обновлено для включения информации о типе, чтобы избежать путаницы с скалярами Python.

Скаляры теперь выводятся как np.float64(3.0) а не просто 3.0. Это может нарушить рабочие процессы, которые хранят представления чисел (например, в файлах), затрудняя их чтение. Их следует хранить как явные строки, например, используя str() или f"{scalar!s}". Пока что затронутые пользователи могут использовать np.set_printoptions(legacy="1.25") чтобы получить старое поведение (с возможными несколькими исключениями). Документация зависимых проектов может потребовать более крупных обновлений, если фрагменты кода тестируются. Мы работаем над инструментами для doctest-plus для облегчения обновлений.

(gh-22449)

Изменение истинности строк NumPy#

Строки NumPy ранее были несогласованны в определении того, является ли строка True или False и определение не соответствовало тому, которое используется Python. Строки теперь считаются True когда они не пустые и False когда они пусты. Это изменяет следующие отдельные случаи:

  • Приведение из строки к булевому типу ранее было примерно эквивалентно string_array.astype(np.int64).astype(bool), что означает, что только допустимые целые числа могли быть приведены. Теперь строка "0" будет считаться True поскольку он не пуст. Если вам нужно старое поведение, вы можете использовать описанный выше шаг (сначала приведение к целому числу) или string_array == "0" (если входные данные всегда 0 или 1). Чтобы получить новый результат в старых версиях NumPy, используйте string_array != "".

  • np.nonzero(string_array) ранее игнорировал пробелы, так что строка, содержащая только пробелы, считалась False. Пробелы теперь считаются True.

Это изменение не затрагивает np.loadtxt, np.fromstring, или np.genfromtxt. Первые два всё ещё используют целочисленное определение, в то время как genfromtxt продолжает соответствовать для "true" (игнорируя регистр). Однако, если np.bool_ используется как конвертер, результат изменится.

Изменение затрагивает np.fromregex поскольку он использует прямые присваивания.

(gh-23871)

A mean ключевое слово было добавлено в функции var и std#

Часто, когда требуется стандартное отклонение, также требуется среднее значение. То же самое относится к дисперсии и среднему значению. До сих пор среднее значение вычислялось дважды, изменение, введенное здесь для var и std функции позволяет передавать предварительно вычисленное среднее значение в качестве аргумента ключевого слова. См. строки документации для подробностей и примера, иллюстрирующего ускорение.

(gh-24126)

Удалить предупреждение об устаревании datetime64 при создании с часовым поясом#

The numpy.datetime64 метод теперь выдает UserWarning вместо DeprecationWarning, когда временная зона включена в строку даты и времени, которая предоставляется.

(gh-24193)

Целочисленный тип данных по умолчанию теперь 64-битный на 64-битных Windows#

Целочисленный тип по умолчанию в NumPy теперь 64-битный на всех 64-битных системах, поскольку исторический 32-битный тип по умолчанию в Windows часто вызывал проблемы. Большинство пользователей не заметят этого изменения. Основные проблемы могут возникнуть при взаимодействии кода с библиотеками, написанными на компилируемых языках, таких как C. Для получения дополнительной информации см. Целое число по умолчанию в Windows.

(gh-24224)

Переименовано numpy.core to numpy._core#

Доступ к numpy.core теперь выдаёт DeprecationWarning. На практике мы обнаружили, что большинство случаев использования в последующих проектах numpy.core предназначался для доступа к функциональности, доступной в основном numpy пространство имён. Если по какой-то причине вы используете функциональность в numpy.core который недоступен в основном numpy пространство имён, это означает, что вы, вероятно, используете внутренние компоненты NumPy. Вы всё ещё можете получить доступ к этим внутренним компонентам через numpy._core без предупреждения об устаревании, но мы не предоставляем никаких гарантий обратной совместимости для внутренних компонентов NumPy. Пожалуйста, создайте issue, если вы считаете, что была допущена ошибка и что-то нужно сделать публичным.

(gh-24634)

Опция отладки "relaxed strides", которая ранее включалась через NPY_RELAXED_STRIDES_DEBUG переменная окружения или -Drelaxed-strides-debug флаг config-settings был удален.

(gh-24717)

Переопределение np.intp/np.uintp (почти никогда не изменяется)#

Из-за фактического использования этих типов почти всегда совпадающего с использованием size_t/Py_ssize_t теперь это определение в C. Ранее оно соответствовало intptr_t и uintptr_t что часто было бы тонко некорректно. Это не влияет на подавляющее большинство машин, поскольку размер этих типов различается только на крайне нишевых платформах.

Однако это означает, что:

  • Указатели могут не обязательно помещаться в intp типизированный массив больше. p и P символьные коды все еще могут использоваться, однако.

  • Создание intptr_t или uintptr_t типизированные массивы в C остаются возможными кроссплатформенно через PyArray_DescrFromType('p').

  • Новые символьные коды nN были введены.

  • Теперь корректно использовать функции Python C-API при разборе в npy_intp типизированные аргументы.

(gh-24888)

numpy.fft.helper сделаны приватными#

numpy.fft.helper был переименован в numpy.fft._helper чтобы указать, что это приватный подмодуль. Все публичные функции, экспортируемые им, должны быть доступны из numpy.fft.

(gh-24945)

numpy.linalg.linalg сделаны приватными#

numpy.linalg.linalg был переименован в numpy.linalg._linalg и будет установлен как foo.ini в подкаталоге 'lib'. numpy.linalg.

(gh-24946)

Ось вне границ не совпадает с axis=None#

В некоторых случаях axis=32 или для конкатенации любого большого значения было таким же, как axis=None. За исключением concatenate это устарело. Любое значение оси вне границ теперь вызовет ошибку, убедитесь, что используете axis=None.

(gh-25149)

Новый copy ключевое слово означает для array и asarray конструкторы#

Теперь numpy.array и numpy.asarray поддерживает три значения для copy параметр:

  • None - Копия будет создана только при необходимости.

  • True - Всегда создавайте копию.

  • False - Никогда не создавайте копию. Если требуется копия, ValueError вызывается исключение.

Значение False изменился, так как теперь вызывает исключение, если требуется копия.

(gh-25168)

The __array__ специальный метод теперь принимает copy аргумент ключевого слова.#

NumPy будет передавать copy в __array__ специальный метод в ситуациях, где он будет установлен в не-стандартное значение (например, при вызове np.asarray(some_object, copy=False)). В настоящее время, если возникает ошибка непредвиденного аргумента-ключевого слова после этого, NumPy выведет предупреждение и повторит попытку без copy аргумент ключевого слова. Реализации объектов, реализующих __array__ протокол должен принимать copy ключевое слово аргумент с тем же значением, что и при передаче в numpy.array или numpy.asarray.

(gh-25168)

Очистка инициализации numpy.dtype со строками с запятыми#

Интерпретация строк с запятыми немного изменена: завершающая запятая теперь всегда создаёт структурированный dtype. Например, где ранее np.dtype("i") и np.dtype("i,") рассматривались как идентичные, теперь np.dtype("i,") создаст структурированный dtype с одним полем. Это аналогично np.dtype("i,i") создание структурированного типа данных с двумя полями, что делает поведение согласованным с ожидаемым для кортежей.

В то же время, использование одного числа, окружённого скобками, для указания формы подмассива, как в np.dtype("(2)i,"), устарело. Вместо этого следует использовать np.dtype("(2,)i") или np.dtype("2i"). В конечном итоге использование числа в скобках вызовет исключение, как в случае инициализаций без запятой, например, np.dtype("(2)i").

(gh-25434)

Изменение в расчете знака комплексного числа#

Согласно стандарту Array API, комплексный знак теперь вычисляется как z / |z| (вместо менее логичного случая, когда брался знак действительной части, если только действительная часть не была нулём, в этом случае возвращался знак мнимой части). Как и для действительных чисел, возвращается ноль, если z==0.

(gh-25441)

Типы возвращаемых значений функций, которые возвращали список массивов#

Функции, которые возвращали список ndarrays, были изменены для возврата кортежа ndarrays. Последовательное возвращение кортежей, когда возвращается последовательность массивов, упрощает поддержку этих функций для JIT-компиляторов, таких как Numba, а также для статических проверок типов в некоторых случаях. Измененные функции: atleast_1d, atleast_2d, atleast_3d, broadcast_arrays, meshgrid, ogrid, histogramdd.

np.unique return_inverse форма для многомерных входных данных#

Когда многомерные входные данные передаются в np.unique с return_inverse=True, unique_inverse выходные данные теперь формируются так, что входные данные можно восстановить напрямую с помощью np.take(unique, unique_inverse) когда axis=None, и np.take_along_axis(unique, unique_inverse, axis=axis) в противном случае.

Примечание

Это изменение было отменено в версии 2.0.1, за исключением axis=None. Правильная реконструкция всегда np.take(unique, unique_inverse, axis=axis). Когда требуется поддержка версии 2.0.0, добавьте unique_inverse.reshape(-1) в код.

(gh-25553, gh-25570)

any и all возвращает булевы значения для массивов объектов#

The any и all функции и методы теперь возвращают логические значения также для объектных массивов. Ранее они выполняли редукцию, которая вела себя как Python or и and операторы, которые вычисляются в один из аргументов. Вы можете использовать np.logical_or.reduce и np.logical_and.reduce для достижения предыдущего поведения.

(gh-25712)

np.can_cast не может быть вызван для Python int, float или complex#

np.can_cast не может быть вызван с экземплярами Python int, float или complex больше. Это связано с тем, что NEP 50 означает, что результат can_cast не должен зависеть от переданного значения. К сожалению, для скаляров Python, следует ли считать приведение "same_kind" или "safe" может зависеть от контекста и значения, поэтому это в настоящее время не реализовано. В некоторых случаях это означает, что вам может потребоваться добавить конкретный путь для: if type(obj) in (int, float, complex): ....

(gh-26393)