Примечания к выпуску NumPy 1.18.0#
В дополнение к обычным исправлениям ошибок, этот выпуск NumPy очищает и документирует новый случайный C-API, отменяет большое количество старых устаревших функций и улучшает внешний вид документации. Поддерживаемые версии Python — 3.5-3.8. Это последняя серия выпусков NumPy, которая будет поддерживать Python 3.5.
Разработчикам нижестоящих проектов следует использовать Cython >= 0.29.14 для поддержки Python 3.8 и OpenBLAS >= 3.7, чтобы избежать проблем на архитектуре Skylake.
Основные моменты#
C-API для
numpy.randomбыло определено и задокументировано.Базовая инфраструктура для линковки с 64-битными библиотеками BLAS и LAPACK.
Многочисленные улучшения документации.
Новые функции#
Многомерное гипергеометрическое распределение добавлено в numpy.random#
Метод multivariate_hypergeometric был добавлен в класс
numpy.random.Generator. Этот метод генерирует случайные величины из многомерного гипергеометрического распределения вероятностей.
(gh-13794)
Устаревшие функции#
np.fromfile и np.fromstring выдаст ошибку при некорректных данных#
В будущих выпусках numpy функции np.fromfile и np.fromstring
выдаст ошибку при разборе некорректных данных. Теперь это даст DeprecationWarning где ранее частичные или
даже недействительные данные возвращались без предупреждения. Это устаревание также затрагивает
функции, определённые в C PyArray_FromString и PyArray_FromFile
(gh-13605)
Устаревание нескалярных массивов в качестве значений заполнения в ma.fill_value#
Установка MaskedArray.fill_value в нескалярный массив устарело, поскольку логика трансляции заполняющего значения в массив ненадежна, особенно при срезе. (gh-13698)
Устарело PyArray_As1D, PyArray_As2D#
PyArray_As1D, PyArray_As2D устарели, используйте
PyArray_AsCArray вместоgh-14036)
Устарело np.alen#
np.alen был устаревшим. Используйте len вместо.
(gh-14181)
Устарели финансовые функции#
В соответствии с
NEP-32,
финансовые функции fv ipmt, irr, mirr, nper,
npv, pmt, ppmt, pv и rate устарели и будут удалены из NumPy 1.20. Замена для этих функций — пакет Python
numpy-financial.
(gh-14720)
The axis аргумент для numpy.ma.mask_cols и numpy.ma.mask_row устарел#
Этот аргумент всегда игнорировался. (gh-14996)
Устаревшие устаревания#
PyArray_As1DиPyArray_As2Dбыли удалены в пользуPyArray_AsCArray(gh-14036)np.rankбыл удален. Это было устаревшим в NumPy 1.10 и заменено наnp.ndim. (gh-14039)Устаревание
expand_dimsоси вне диапазона в 1.13.0 истекли. (gh-14051)PyArray_FromDimsAndDataAndDescrиPyArray_FromDimsбыли удалены (они всегда будут вызывать ошибку). ИспользуйтеPyArray_NewFromDescrиPyArray_SimpleNewвместо. (gh-14100)numeric.loads,numeric.load,np.ma.dump,np.ma.dumps,np.ma.load,np.ma.loadsудалены, используйтеpickleметоды вместоgh-14256)arrayprint.FloatFormat,arrayprint.LongFloatFormatбыл удален, используйтеFloatingFormatвместоarrayprint.ComplexFormat,arrayprint.LongComplexFormatбыл удален, используйтеComplexFloatingFormatвместоarrayprint.StructureFormatбыл удален, используйтеStructureVoidFormatвместоgh-14259)np.testing.randбыл удален. Это было устаревшим в NumPy 1.11 и заменено наnp.random.rand. (gh-14325)Класс
SafeEvalвnumpy/lib/utils.pyбыл удален. Это было устаревшим в NumPy 1.10. Используйтеnp.safe_evalвместо. (gh-14335)Удалена устаревшая поддержка булевых и пустых списков условий в
np.select(gh-14583)Порядок массива принимает только 'C', 'F', 'A' и 'K'. Более разрешительные варианты были устаревшими в NumPy 1.11. (gh-14596)
параметр np.linspace
numдолжно быть целым числом. Устарело в NumPy 1.12. (gh-14620)UFuncs с несколькими выходами должны использовать кортеж для
outkwarg. Это завершает устаревание, начатое в NumPy 1.10. (gh-14682)
Файлы numpy/testing/decorators.py, numpy/testing/noseclasses.py
и numpy/testing/nosetester.py были удалены. Они никогда
не предназначались для публичного использования (все соответствующие объекты присутствуют в
numpy.testing пространство имён), и их импорт выдавал предупреждение об устаревании с NumPy 1.15.0 (gh-14567)
Примечания по совместимости#
numpy.lib.recfunctions.drop_fields больше не может возвращать None#
Если drop_fields используется для удаления всех полей, ранее массив полностью отбрасывался и возвращался None. Теперь он возвращает массив той же формы, что и входной, но без полей. Старое поведение можно сохранить с помощью:
dropped_arr = drop_fields(arr, ['a', 'b'])
if dropped_arr.dtype.names == ():
dropped_arr = None
преобразование пустого recarray в None (gh-14510)
numpy.argmin/argmax/min/max возвращает NaT если он существует в массиве#
numpy.argmin, numpy.argmax, numpy.min, и numpy.max вернет
NaT если он существует в массиве. (gh-14717)
np.can_cast(np.uint64, np.timedelta64, casting='safe') теперь False#
Ранее это было True - однако это было несовместимо с uint64
не может быть безопасно приведён к int64, и приводя к странному разрешению типов.
Если это влияет на ваш код, приведите uint64 to int64 сначала.
(gh-14718)
Изменен поток случайных величин с numpy.random.Generator.integers#
Была ошибка в numpy.random.Generator.integers который вызывал смещённую
выборку 8- и 16-битных целочисленных типов. Исправление этой ошибки изменило
поток вывода по сравнению с предыдущими выпусками.
(gh-14777)
Добавить больше циклов ufunc для datetime64, timedelta64#
np.datetime('NaT') должен вести себя больше как float('Nan'). Добавить необходимую инфраструктуру, чтобы np.isinf(a) и np.isnan(a) будет работать на
datetime64 и timedelta64 dtypes. Также добавлены специальные циклы для
numpy.fmin и numpy.fmax эта маска NaT. Это может потребовать корректировки пользовательского кода. В частности, кода, который либо запрещал вызовы numpy.isinf или numpy.isnan или проверяли, что они вызывают исключение, потребуют адаптации, а код, который ошибочно вызывал
numpy.fmax и numpy.fmin вместо numpy.maximum или
numpy.minimum соответственно потребуют корректировки. Это также влияет на
numpy.nanmax и numpy.nanmin.
(gh-14841)
Перемещённые модули в numpy.random#
В рамках очистки API подмодули в numpy.random
bit_generator, philox, pcg64, sfc64, common, generator,
и bounded_integers были перемещены в _bit_generator, _philox,
_pcg64, _sfc64, _common, _generator, и _bounded_integers
соответственно, чтобы указать, что они не являются частью публичного интерфейса. (gh-14608)
Изменения в C API#
PyDataType_ISUNSIZED(descr) теперь возвращает False для структурированных типов данных#
Ранее это возвращало True для любого типа данных с размером элемента 0, но теперь возвращает false для негибкого типа данных с размером элемента 0, np.dtype([]).
(gh-14393)
Новые возможности#
Добавить наш собственный *.pxd файл импорта cython#
Добавлен numpy/__init__.pxd файл. Он будет использоваться для cimport numpy
(gh-12284)
Теперь можно вводить кортеж осей в expand_dims#
The numpy.expand_dims axis ключевое слово теперь может принимать кортеж
осей. Ранее axis должно было быть целым числом.
(gh-14051)
Поддержка 64-битного OpenBLAS#
Добавлена поддержка 64-битного (ILP64) OpenBLAS. См. site.cfg.example
подробности.
(gh-15012)
Добавить --f2cmap опция для F2PY#
Позволяет указать файл для загрузки пользовательских сопоставлений типов Fortran-to-C. (gh-15113)
Улучшения#
Различные числовые типы C одинакового размера имеют уникальные имена#
На любой заданной платформе, два из np.intc, np.int_, и np.longlong
ранее выглядели неразличимыми через их repr, несмотря на их соответствующие dtype имеющие разные свойства.
Аналогичная проблема существовала для беззнаковых аналогов этих типов, и на
некоторых платформах для np.double и np.longdouble
Эти типы теперь всегда выводятся с уникальным __name__.
(gh-10151)
argwhere теперь даёт согласованный результат на 0d массивах#
На N-мерных массивах, numpy.argwhere теперь всегда создаёт массив формы
(n_non_zero, arr.ndim), даже когда arr.ndim == 0. Ранее
последняя ось имела бы размерность 1 в этом случае.
(gh-13610)
Добавить axis аргумент для random.permutation и random.shuffle#
Ранее random.permutation и random.shuffle функции могут перемешивать массив только вдоль первой оси; теперь у них есть новый аргумент axis будет 1, при этом результирующий массив имеет ту же форму, что иgh-13829)
method именованный аргумент для np.random.multivariate_normal#
A method аргумент ключевого слова теперь доступен для
np.random.multivariate_normal с возможными значениями
{'svd', 'eigh', 'cholesky'}. Чтобы использовать его, напишите
np.random.multivariate_normal(..., method=.
(gh-14197)
Добавить поддержку комплексных чисел для numpy.fromstring#
Теперь numpy.fromstring может читать комплексные числа.
(gh-14227)
numpy.unique имеет согласованный порядок осей, когда axis не является None#
Используя moveaxis вместо swapaxes в numpy.unique, чтобы порядок осей,
кроме оси в аргументах, не был нарушен.
(gh-14255)
numpy.matmul с булевым выводом теперь преобразуется в булевы значения#
Вызов numpy.matmul где выходной массив является булевым, заполнял бы массив эквивалентами uint8 результата, а не 0/1. Теперь он принудительно устанавливает выходные значения в 0 или 1 (NPY_TRUE или NPY_FALSE).
(gh-14464)
numpy.random.randint выдавало некорректное значение, когда диапазон был 2**32#
Реализация, представленная в версии 1.17.0, имела некорректную проверку при
определении, использовать ли 32-битный путь или полный 64-битный
путь, которая неправильно перенаправляла генерацию случайных целых чисел с диапазоном high - low 2**32 к 64-битному генератору.
(gh-14501)
Добавить поддержку комплексных чисел для numpy.fromfile#
Теперь numpy.fromfile может читать комплексные числа.
(gh-14730)
std=c99 добавлено, если компилятор назван gcc#
GCC до версии 5 требует -std=c99 аргумент командной строки. Новые компиляторы автоматически включают режим C99. Код настройки компилятора автоматически добавит код, если имя компилятора содержит gcc в нём.
(gh-14771)
Изменения#
NaT теперь сортируется в конец массивов#
NaT теперь фактически рассматривается как наибольшее целое число для целей сортировки, так что оно сортируется в конец массивов. Это изменение сделано для согласованности с NaN поведение сортировки.
(gh-12658)
(gh-15068)
Некорректный threshold в np.set_printoptions вызывает TypeError или ValueError#
Ранее некорректный threshold вызвано ValueError; теперь вызывает TypeError
для нечисловых типов и ValueError для nan значения.
(gh-13899)
Предупреждать при сохранении типа данных с метаданными#
A UserWarning будет выдан при сохранении массива через numpy.save с
metadata. Сохранение такого массива может не сохранить метаданные, и если метаданные
сохраняются, их загрузка вызовет ValueError. Этот недостаток в save
и load будет исправлен в будущем выпуске.
(gh-14142)
numpy.distutils изменено поведение append для LDFLAGS и аналогичных#
numpy.distutils всегда перезаписывал, а не добавлял к LDFLAGS и другими аналогичными переменными окружения для компиляции расширений Fortran. Теперь поведение по умолчанию изменилось на добавление — что является ожидаемым поведением в большинстве ситуаций. Чтобы сохранить старое поведение (перезапись), установите
NPY_DISTUTILS_APPEND_FLAGS переменную окружения в 0. Это относится к:
LDFLAGS, F77FLAGS, F90FLAGS, FREEFLAGS, FOPT, FDEBUG,
и FFLAGS. NumPy 1.16 и 1.17 выдавали предупреждения при сборке в ситуациях, когда это
изменение в поведении повлияло бы на используемые флаги компиляции.
(gh-14248)
Удалить numpy.random.entropy без устаревания#
numpy.random.entropy был добавлен в numpy.random пространство имён в версии 1.17.0. Оно предназначалось как приватный c-расширяемый модуль, но было открыто как публичный. Заменено на numpy.random.SeedSequence поэтому модуль был полностью удален.
(gh-14498)
Добавить опции для тихой конфигурации сборки и сборки с -Werror#
Добавлены две новые опции конфигурации. Во время build_src подкоманда, как часть настройки NumPy, файлы _numpyconfig.h и config.h создаются путем проверки поддержки различных функций и процедур времени выполнения. Ранее очень подробный вывод компилятора на этом этапе затмевал более важную информацию. По умолчанию вывод отключен. Запуск
runtests.py --debug-info добавит --verbose-cfg в build_src
подкоманда, которая восстановит предыдущее поведение.
Добавление CFLAGS=-Werror превращение предупреждений в ошибки вызывало бы ошибки
во время конфигурации. Теперь runtests.py --warn-error добавит
--warn-error в build подкоманда, которая будет передана в
build_ext и build_lib подкоманды. Это добавит флаг компилятора к этим этапам и превратит предупреждения компилятора в ошибки при фактической сборке самого NumPy, избегая build_src вызовы подкоманд компилятора.