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