Новый Numpy 1.20.0 — что туда завезли и стоит ли обновлять?
Друзья, только недавно вышел новый релиз 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 вызвало сложности с поддержкой предыдущего кода. Кто-то уже встречался с таким? Пишите в комментариях, давайте обменяемся опытом по этому вопросу. Не каждый день все-таки обновления выходят, тем более такие крупные.