Новый Numpy 1.20.0 — что туда завезли и стоит ли обновлять?

Python Машинное обучение
Друзья, только недавно вышел новый релиз Numpy 1.20.0 и самое время обсудить, что туда завезли интересного. Само собой, обсуждать будем не все - иначе мы просто с головой погрязнем в изучении доки. Публикуем только самое интересное (на наш скромный и неправильный взгляд). Если Вы для себя выделяете еще что-то важное, о чем мы не упомянули - поделитесь в комментариях! Итак, приступим. Новые функции В классе random.Generator появилась новая функция permuted. Она отличается от shuffle и permutation . Старые функции воспринимали входные данные как массив и обрабатывали его также. Новая функция permuted же позволяет, например, независимо перемешать элементы массива. sliding_window_view дает возможность использовать скользящие окна для массивов numpy Оконные функции - актуальный вопрос и многие смежные библиотеки давно в них нуждались (а у некоторых даже есть свои реализации - см. skimage.utils.view_as_windows() ). Это позволит облегчить реализации некоторых алгоритмов, например, скользящего среднего. Новая функция numpy.broadcast_shapes Функция numpy.broadcast_shapes принимает на вход кортежи с размерностями исходных массивов и возвращает результат - какая будет итоговая форма результирующего массива после броадкастинга всех заданных форм друг с другом. >>> np.broadcast_shapes((1, 2), (3, 1))
(3, 2)

>>> np.broadcast_shapes(2, (3, 1))
(3, 2)

>>> np.broadcast_shapes((6, 7), (5, 6, 1), (7,), (5, 1, 7))
(5, 6, 7) Подробнее про броадкастинг (broadcasting) можно почитать здесь . Кстати говоря, если полазить в исходниках на Github, можно найти много забавного. Вот, например: Что уходит в прошлое? А теперь давайте обсудим, что уходить в прошлое и is deprecated, как говорят в народе. Использование алиасов для встроенных типов Чтобы не вызывать конфузов у новичков, алиасы для встроенных типов, например, np.int и int отправлены на пенсию. Вот полная таблица с изменениями: Вызов numpy.dual Модуль numpy.dual отправлен на пенсию. Вместо импортирования функция из него, их следует импортировать напрямую из numpy и scipy. Финансовые функции Финансовые функции убрали из Numpy 1.20. Следующие функции доступны в библиотеке numpy_financial : fv, ipmt, irr, mirr, nper, npv, pmt, ppmt, pv, rate . Новые фичи Аргумент where для all и any Добавлен аргумент where , который позволяет работать только с определенными элементами и размерностями массивов в all и any . Например: >>> np.all([[True, True], [False, True]])
False

>>> np.all([[True, True], [False, True]], where=[[True], [False]])
True Аргумент where для mean, str, var Аналогично предыдущему случаю, для функций mean, std, var добавлен аргумент where , который позволяет обрабатывать только часть исходных массивов и сокращать вычисления. Например: >>> a = np.array([[5, 9, 13], [14, 10, 12], [11, 15, 19]])
>>> np.mean(a)

12.0

>>> np.mean(a, where=[[True], [False], [False]])

9.0 Изменения np.linspace с целыми числами теперь использует floor Раньше, используя np.linspace с целыми числами (int), округление дробей производилось относительно нуля, что влияло на результат с отрицательными числами: >>> np.linspace(-3, 1, 8, dtype=int)
array([-3, -2, -1, -1, 0, 0, 0, 1]) Теперь округление производится относительно , что дает более логичный результат: >>> np.linspace(-3, 1, 8, dtype=int)
array([-3, -3, -2, -2, -1, -1, 0, 1]) Эпилог Полный перечень изменений Вы можете посмотреть в официальном релизе . И не забудьте погулять по документации и Github, потому что из описания далеко не всегда все понятно. Ну, и конечно, не забываем все это дело пробовать на практике - вдруг что-то не работает :) Кстати говоря, уже есть случаи, когда обновление Numpy до версии 1.20 вызвало сложности с поддержкой предыдущего кода. Кто-то уже встречался с таким? Пишите в комментариях, давайте обменяемся опытом по этому вопросу. Не каждый день все-таки обновления выходят, тем более такие крупные.)
Теги:
Хабы: