Share This
Связаться со мной
Крути в низ
Categories
//Новый Numpy 1.20.0 — что туда завезли и стоит ли обновлять?

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

02.02.2021Category : My Habr

Друзья, только недавно вышел новый релиз Numpy 1.20.0 и самое время обсудить, что туда завезли интересного.

Само собой, обсуждать будем не все — иначе мы просто с головой погрязнем в изучении доки. Публикуем только самое интересное (на наш скромный и неправильный взгляд). Если Вы для себя выделяете еще что-то важное, о чем мы не упомянули — поделитесь в комментариях!

Итак, приступим.

Новые функции

В классе random.Generator появилась новая функция permuted.

Она отличается от shuffle и permutation. Старые функции воспринимали входные данные как

novyj numpy 1200 chto tuda zavezli i stoit li obnovljat 17d6de6 - Новый Numpy 1.20.0 — что туда завезли и стоит ли обновлять?

массив и обрабатывали его также. Новая функция permuted же позволяет, например, независимо перемешать элементы

novyj numpy 1200 chto tuda zavezli i stoit li obnovljat a0cb226 - Новый Numpy 1.20.0 — что туда завезли и стоит ли обновлять?

массива.

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, можно найти много забавного. Вот, например:

novyj numpy 1200 chto tuda zavezli i stoit li obnovljat 1c02c20 - Новый Numpy 1.20.0 — что туда завезли и стоит ли обновлять?

Что уходит в прошлое?

А теперь давайте обсудим, что уходить в прошлое и is deprecated, как говорят в народе.

Использование алиасов для встроенных типов

Чтобы не вызывать конфузов у новичков, алиасы для встроенных типов, например, np.int иint отправлены на пенсию. Вот полная таблица с изменениями:

novyj numpy 1200 chto tuda zavezli i stoit li obnovljat bcc4c73 - Новый Numpy 1.20.0 — что туда завезли и стоит ли обновлять?

Вызов 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])

Теперь округление производится относительно

novyj numpy 1200 chto tuda zavezli i stoit li obnovljat e9e8706 - Новый Numpy 1.20.0 — что туда завезли и стоит ли обновлять?

, что дает более логичный результат:

>>> np.linspace(-3, 1, 8, dtype=int) array([-3, -3, -2, -2, -1, -1, 0, 1])

Эпилог

Полный перечень изменений Вы можете посмотреть в официальном релизе. И не забудьте погулять по документации и Github, потому что из описания далеко не всегда все понятно. Ну, и конечно, не забываем все это дело пробовать на практике — вдруг что-то не работает 🙂

Кстати говоря, уже есть случаи, когда обновление Numpy до версии 1.20 вызвало сложности с поддержкой предыдущего кода. Кто-то уже встречался с таким? Пишите в комментариях, давайте обменяемся опытом по этому вопросу. Не каждый день все-таки обновления выходят, тем более такие крупные.

  • 4 views
  • 0 Comment

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Связаться со мной
Close