Термин широковещание относится к способности NumPy обрабатывать массивы различных форм во время арифметических операций. Арифметические операции над массивами обычно выполняются с соответствующими элементами. Если два массива имеют одинаковую форму, то эти операции выполняются плавно.
Пример 1
import numpy as np a = np.array([1,2,3,4]) b = np.array([10,20,30,40]) c = a * b print c
Его вывод выглядит следующим образом —
[10 40 90 160]
Если размеры двух массивов различны, операции элемент-элемент невозможны. Тем не менее, в NumPy все еще возможны операции с массивами не похожих форм из-за возможности вещания. Меньший массив передается по размеру большего массива, чтобы они имели совместимые формы.
Вещание возможно при соблюдении следующих правил:
-
Массив с меньшим значением ndim, чем другой, в начале имеет «1».
-
Размер в каждом измерении выходной формы является максимальным из входных размеров в этом измерении.
-
Входные данные могут использоваться в вычислениях, если его размер в определенном измерении соответствует выходному размеру или его значение точно равно 1.
-
Если вход имеет размерность измерения 1, первая запись данных в этом измерении используется для всех вычислений в этом измерении.
Массив с меньшим значением ndim, чем другой, в начале имеет «1».
Размер в каждом измерении выходной формы является максимальным из входных размеров в этом измерении.
Входные данные могут использоваться в вычислениях, если его размер в определенном измерении соответствует выходному размеру или его значение точно равно 1.
Если вход имеет размерность измерения 1, первая запись данных в этом измерении используется для всех вычислений в этом измерении.
Набор массивов считается транслируемым, если приведенные выше правила дают действительный результат, и одно из следующего верно:
-
Массивы имеют точно такую же форму.
-
Массивы имеют одинаковое количество измерений, а длина каждого измерения равна общей длине или 1.
-
Массив, имеющий слишком мало измерений, может иметь свою форму с добавлением размера длины 1, так что указанное выше свойство имеет значение true.
Массивы имеют точно такую же форму.
Массивы имеют одинаковое количество измерений, а длина каждого измерения равна общей длине или 1.
Массив, имеющий слишком мало измерений, может иметь свою форму с добавлением размера длины 1, так что указанное выше свойство имеет значение true.
Следующая программа показывает пример вещания.
Пример 2
import numpy as np a = np.array([[0.0,0.0,0.0],[10.0,10.0,10.0],[20.0,20.0,20.0],[30.0,30.0,30.0]]) b = np.array([1.0,2.0,3.0]) print 'First array:' print a print '\n' print 'Second array:' print b print '\n' print 'First Array + Second Array' print a + b
Результат этой программы будет следующим:
First array: [[ 0. 0. 0.] [ 10. 10. 10.] [ 20. 20. 20.] [ 30. 30. 30.]] Second array: [ 1. 2. 3.] First Array + Second Array [[ 1. 2. 3.] [ 11. 12. 13.] [ 21. 22. 23.] [ 31. 32. 33.]]
На следующем рисунке показано, как массив b транслируется, чтобы стать совместимым с a .