Примечания к выпуску NumPy 1.4.0#
Этот минорный выпуск включает множество исправлений ошибок, а также несколько новых функций. Он обратно совместим с выпуском 1.3.0.
Основные моменты#
Новая поддержка типа данных datetime для работы с датами в массивах
Более быстрое время импорта
Расширенный механизм обёртки массивов для ufuncs
Новый итератор соседства (только на уровне C)
C99-подобные комплексные функции в npymath
Новые возможности#
Расширенный механизм обёртки массивов для ufuncs#
Метод __array_prepare__ был добавлен в ndarray, чтобы предоставить подклассам большую гибкость во взаимодействии с ufuncs и подобными функциями. ndarray уже предоставлял __array_wrap__, который позволял подклассам устанавливать тип массива для результата и заполнять метаданные на выходе из ufunc (как видно в реализации MaskedArray). Для некоторых приложений необходимо предоставлять проверки и заполнять метаданные на входе. __array_prepare__ вызывается сразу после инициализации выходного массива ufunc, но перед вычислением результатов и заполнением. Таким образом, проверки могут быть выполнены и ошибки вызваны до операций, которые могут изменять данные на месте.
Автоматическое обнаружение несовместимостей в будущем#
Ранее, если расширение было собрано для версии N NumPy и использовалось в системе с NumPy M < N, import_array завершался успешно, что могло приводить к сбоям, поскольку версия M не содержит функцию из версии N. Начиная с NumPy 1.4.0, это вызовет ошибку в import_array, поэтому ошибка будет обнаружена на раннем этапе.
Новые итераторы#
В C API добавлен новый итератор окрестностей. Его можно использовать для итерации по элементам в окрестности массива, и он может автоматически обрабатывать граничные условия. Доступны нулевое и единичное заполнение, а также заполнение произвольным постоянным значением, зеркальное и циклическое заполнение.
Новая поддержка полиномов#
Добавлены новые модули chebyshev и polynomial. Новый модуль polynomial не совместим с текущей поддержкой полиномов в numpy, но очень похож на новый модуль chebyshev. Наиболее заметное отличие для большинства будет в том, что коэффициенты указываются от низкой к высокой степени, что низкоуровневые функции не не работать с классами Чебышёва и Полинома как аргументами, и что классы Чебышёва и Полинома включают домен. Отображение между доменами — это линейная подстановка, и два класса могут быть преобразованы один в другой, позволяя, например, разложить ряд Чебышёва в одном домене как полином в другом домене. Новые классы в целом должны использоваться вместо низкоуровневых функций, последние предоставлены для тех, кто хочет построить свои собственные классы.
Новые модули не импортируются автоматически в пространство имён numpy, их необходимо явно импортировать с помощью оператора "import numpy.polynomial".
Новый C API#
В C API были добавлены следующие C-функции:
PyArray_GetNDArrayCFeatureVersion: возвращает API версия загруженного numpy.
PyArray_Correlate2 - как PyArray_Correlate, но реализует обычное определение корреляции. Входные данные не меняются местами, и для комплексных массивов берётся сопряжённое значение.
PyArray_NeighborhoodIterNew - новый итератор для перебора окрестности точки с автоматической обработкой границ. Он документирован в разделе итераторов справочника C-API, и вы можете найти примеры в файле multiarray_test.c.src в numpy.core.
Новые ufuncs#
В C API были добавлены следующие универсальные функции (ufuncs):
copysign - возвращает значение первого аргумента со знаком, скопированным из второго аргумента.
nextafter — возвращает следующее представимое значение с плавающей запятой первого аргумента в направлении второго аргумента.
Новые определения#
Процессор alpha теперь определен и доступен в numpy/npy_cpu.h. Исправлено некорректное обнаружение процессора PARISC. Определения:
NPY_CPU_HPPA: PARISC
NPY_CPU_ALPHA: Alpha
Тестирование#
декоратор deprecated: этот декоратор может использоваться для избежания загромождения вывода тестирования, пока проверяется, что DeprecationWarning действительно вызывается декорированным тестом.
assert_array_almost_equal_nulp: новый метод для сравнения двух массивов значений с плавающей точкой. С этой функцией два значения считаются близкими, если между ними не много представимых значений с плавающей точкой, что делает её более устойчивой, чем assert_array_almost_equal, когда значения сильно колеблются.
assert_array_max_ulp: вызывает утверждение, если между двумя значениями с плавающей точкой больше N представимых чисел.
assert_warns: вызывает AssertionError, если вызываемый объект не генерирует предупреждение соответствующего класса, не изменяя состояние предупреждений.
Повторное использование npymath#
В версии 1.3.0 мы начали размещать переносимые математические процедуры на C в библиотеке npymath, чтобы люди могли использовать их для написания переносимых расширений. К сожалению, было невозможно легко связаться с этой библиотекой: в версии 1.4.0 была добавлена поддержка в numpy.distutils, чтобы сторонние разработчики могли повторно использовать эту библиотеку. См. документацию coremath для получения дополнительной информации.
Улучшенные операции над множествами#
В предыдущих версиях NumPy некоторые функции множеств (intersect1d, setxor1d, setdiff1d и setmember1d) могли возвращать некорректные результаты, если входные массивы содержали повторяющиеся элементы. Теперь они работают корректно для входных массивов с дубликатами. setmember1d переименована в in1d, так как с изменением для принятия массивов с дубликатами это больше не операция над множествами и концептуально похожа на поэлементную версию оператора Python 'in'. Все эти функции теперь принимают логическое ключевое слово assume_unique. По умолчанию оно равно False, но может быть установлено в True, если известно, что входные массивы не содержат дубликатов, что может увеличить скорость выполнения функций.
Улучшения#
Импорт numpy заметно быстрее (от 20 до 30% в зависимости от платформы и компьютера)
Функции сортировки теперь помещают nan в конец.
Реальный порядок сортировки: [R, nan]
Порядок сортировки комплексных чисел: [R + Rj, R + nanj, nan + Rj, nan + nanj]
Комплексные числа с одинаковым расположением nan сортируются в соответствии с не-nan частью, если она существует.
Функции сравнения типов были приведены в соответствие с новым порядком сортировки nan. Searchsorted теперь работает с отсортированными массивами, содержащими значения nan.
Деление комплексных чисел стало более устойчивым к переполнению.
Комплексное целочисленное деление стало более устойчивым к переполнению.
Устаревшие функции#
Следующие функции устарели:
correlate: принимает новый аргумент old_behavior. При значении True (по умолчанию) возвращает тот же результат, что и раньше. При значении False вычисляет обычную корреляцию и берёт сопряжённое значение для комплексных массивов. Старое поведение будет удалено в NumPy 1.5 и вызывает DeprecationWarning в версии 1.4.
unique1d: используйте unique вместо этого. unique1d вызывает предупреждение об устаревании в версии 1.4 и будет удалён в версии 1.5.
intersect1d_nu: используйте intersect1d вместо этого. intersect1d_nu вызывает предупреждение об устаревании в версии 1.4 и будет удален в версии 1.5.
setmember1d: используйте in1d вместо. setmember1d вызывает предупреждение об устаревании в версии 1.4 и будет удален в версии 1.5.
Следующие вызовы вызывают ошибки:
При работе с 0-d массивами,
numpy.maxи другие функции принимают толькоaxis=0,axis=-1иaxis=None. Использование осей вне допустимого диапазона указывает на ошибку, поэтому Numpy теперь вызывает ошибку в таких случаях.Указание
axis > MAX_DIMSбольше не разрешено; Numpy теперь вызывает ошибку вместо поведения, аналогичногоaxis=None.
Внутренние изменения#
Использовать функции комплексных чисел C99, когда они доступны#
Комплексные типы numpy теперь гарантированно совместимы с ABI с типом complex C99, если он доступен на платформе. Более того, комплексные ufunc теперь используют функции C99 платформы вместо наших собственных.
разделить исходный код multiarray и umath#
Исходный код multiarray и umath был разделён на отдельные логические единицы компиляции. Это должно сделать исходный код более доступным для новичков.
Раздельная компиляция#
По умолчанию каждый файл multiarray (и umath) объединяется в один для компиляции, как это было раньше, но если переменная окружения NPY_SEPARATE_COMPILATION установлена в неотрицательное значение, включается экспериментальная индивидуальная компиляция каждого файла. Это значительно ускоряет цикл компиляции/отладки при работе с ядром numpy.
Отдельная основная математическая библиотека#
Новые функции, которые были добавлены:
npy_copysign
npy_nextafter
npy_cpack
npy_creal
npy_cimag
npy_cabs
npy_cexp
npy_clog
npy_cpow
npy_csqr
npy_ccos
npy_csin