Рубрики
Без рубрики

Numpy Broadcasting – простое руководство

WTF: вещание в Numpy? Эта статья дает вам простое руководство с примерами кода.

Автор оригинала: Chris.

Это как вы говорите, что показывает, кто вы есть.

Существует один термин, который известен только продвинутым NUMPY CODERS. Если вы знаете термин, считайте себя Numpy Pro. Если вы этого не сделаете, вам все еще нужно учиться.

Термин «вещание».

Документация Рассказывает нам, что вещание «описывает, как Numpy обрабатывает массивы с различными формами во время арифметических операций».

Теперь это немного нечетко, я покажу вам, что это значит:

Многие объявленные операции, такие как умножение, выполняются «элемент-мудрый». Например: скажем, умножьте два тазобельных массива A и B с той же формой: A * B.

В этом случае Numpy выполняет умножение MATRIX Element-WISE, умножая клетку A [i, j] с ячейкой b [i, j] для каждой ячейки в массивах.

Поскольку массивы имеют ту же форму, это не проблема.

import numpy as np

salary = np.array([2000, 4000, 8000])
salary_bump = np.array([1.1, 1.1, 1.1])

print(salary * salary_bump)

Что вывод головоломки?

Головоломка демонстрирует сценарий, где компания решает, что все сотрудники получают удар за заработной платой на 10% после успешного года.

Таким образом, результат головоломки – это Numpy Array:

# [2200. 4400. 8800.]

Все идет нормально. Но что произойдет, если вы умножаете две массивы с разными формами?

Ответ снова: вещание.

Вот тот же пример, но сейчас мы немного ленивы и пытаемся сэкономить несколько битов.

salary = np.array([2000, 4000, 8000])
salary_bump = 1.1

print(salary * salary_bump)

Какая вывод этого кода фрагмент?

Поскольку все три значения SALARY_BUMP являются точно такими же номерами, вы пытаетесь сократить его, умножая многу массива с номером.

Таким образом, он производит точно такой же выход.

Внутри NUMPY создает второй неявный массив, который заполнен значением не заработной платы 1.1. Эта процедура называется «вещание».

Не только код, использующий вещание более кратко и читабельно, но это также более эффективно! В первом примере массив Salry_bump содержит избыточность. Но во втором примере Numpy избавляется от этих избавлений – на самом деле не копирует данные во второй Numpy Array (это только концептуальная идея, но не реализация).

Когда вы можете применить вещание двумя буквами?

Вещание возможно только если, вдоль Одно измерение, один массив имеет размер N, но другой размер 1. В противном случае вы не можете выполнять Numpy Operations по двум массивам с разные Формы.

Отсутствующие размеры не являются проблемой в этом сценарии. Вот приятная визуализация из документации о том, как применяются массивы Numpy:

 A      (2d array):  5 x 4
B (1d array): 1
Result (2d array): 5 x 4
A (2d array): 5 x 4
B (1d array): 4
Result (2d array): 5 x 4
A (3d array): 15 x 3 x 5
B (3d array): 15 x 1 x 5
Result (3d array): 15 x 3 x 5
A (3d array): 15 x 3 x 5
B (2d array): 3 x 5
Result (3d array): 15 x 3 x 5
A (3d array): 15 x 3 x 5
B (2d array): 3 x 1
Result (3d array): 15 x 3 x 5

Важным наблюдением является следующее: Для любого измерения, где первый массив имеет размер одного, Numpy Conceptiually копирует свои данные до тех пор, пока не будет достигнут размер второго массива. Более того, если размерность полностью отсутствует для массива B, он просто скопирован вдоль пропущенного измерения.

Задача: Попробуйте понять, что здесь происходит, в первом примере данной визуализации.

Таким образом, вещание автоматически соответствует двум массивам с несовместимой формой – красивая особенность Numpy Library!

Куда пойти отсюда?

Если вы чувствуете, что ваши основы Python могут понадобиться быстрой республики, загрузите мои различные читы Python Cheat (PDF с высоким разрешением), подписываясь на мой «Coffee Break Python» серии электронной почты!

Работая в качестве исследователя в распределенных системах, доктор Кристиан Майер нашел свою любовь к учению студентов компьютерных наук.

Чтобы помочь студентам достичь более высоких уровней успеха Python, он основал сайт программирования образования Finxter.com Отказ Он автор популярной книги программирования Python One-listers (Nostarch 2020), Coauthor of Кофе-брейк Python Серия самооставленных книг, энтузиаста компьютерных наук, Фрилансера и владелец одного из лучших 10 крупнейших Питон блоги по всему миру.

Его страсти пишут, чтение и кодирование. Но его величайшая страсть состоит в том, чтобы служить стремлению кодер через Finxter и помогать им повысить свои навыки. Вы можете присоединиться к его бесплатной академии электронной почты здесь.