Примечания к выпуску 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:
Многие устаревшие функции и макросы удалены, а внутренние приватные части скрыты для облегчения будущего расширения,
Новые, более простые в использовании функции инициализации:
PyArray_ImportNumPyAPIиPyUFunc_ImportUFuncAPI.
Улучшенное поведение:
Улучшения поведения продвижения типов были изменены путём принятия NEP 50. Это исправляет многие неожиданности пользователей относительно приведений, которые ранее часто зависели от значений данных входных массивов, а не только от их типов данных. Пожалуйста, ознакомьтесь с NEP и Руководство по переходу на NumPy 2.0 для подробностей, так как это изменение может привести к изменениям в типах выходных данных и более низкой точности результатов для операций со смешанными типами данных.
Тип целого числа по умолчанию в Windows теперь
int64вместоint32, соответствуя поведению на других платформах,Максимальное количество измерений массива изменено с 32 до 64
Документация:
Навигация по справочному руководству была значительно улучшена, и теперь есть документация по структура модуля,
The сборка из исходного кода документация была полностью переписана,
Кроме того, есть много изменений во внутренней структуре NumPy, включая продолжение миграции кода с C на C++, что упростит улучшение и поддержку NumPy в будущем.
Теорема «бесплатного обеда» гласит, что за все эти улучшения API и поведения, а также лучшую расширяемость в будущем, есть цена:
Обратная совместимость. Существует значительное количество критических изменений как в Python, так и в C API. В большинстве случаев есть четкие сообщения об ошибках, которые сообщат пользователю, как адаптировать их код. Однако также есть изменения в поведении, для которых невозможно было дать такое сообщение об ошибке - эти случаи описаны в разделах Устаревание и Совместимость ниже, а также в Руководство по переходу на NumPy 2.0.
Обратите внимание, что существует
ruffрежим для автоматического исправления многих вещей в коде Python.Критические изменения в 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и соответствующий аргумент ключевого слова ufuncextobj=были удалены. Предпочтительной заменой для всех них является использование контекстного менеджера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и функции CPyArray_SetNumericOpsиPyArray_GetNumericOpsистёк, и функции удалены. (Устарело в NumPy 1.16)(gh-23998)
The
fasttake,fastclip, иfastputmaskArrFuncsустаревание теперь завершено.Устаревшая функция
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_STRINGNPY_UNICODE, илиNPY_VSTRINGвместо этого.(gh-25794)
Примечания по совместимости#
loadtxt и genfromtxt изменена кодировка по умолчанию#
loadtxt и genfromtxt теперь оба по умолчанию encoding=None
которые в основном могут изменять способ converters работать. Теперь они будут переданы str вместо bytes. Передайте
кодировку явно, чтобы всегда получать новое или старое поведение.
Для genfromtxt изменение также означает, что возвращаемые значения теперь будут
строками Unicode, а не байтами.
(gh-25158)
f2py заметки о совместимости#
f2pyбольше не будет принимать неоднозначные-mи.pyfCLI комбинации. Когда более одной.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.htonpy_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.#
(gh-24858)
Новый 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 отключит поведение вещания для скаляров
и гарантирует, что входные массивы имеют одинаковый тип данных.
Добавить 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 массивов:
rtolбыл добавлен вmatrix_rank.
(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, и логические универсальные функции.#
(gh-25651)
Целочисленные последовательности как аргумент 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был псевдонимом для встроенной функции Pythonbool. Новое имя способствует совместимости со стандартом 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)
в код.
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)