NumPy - Вещание
Срок broadcastingотносится к способности 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 из-за возможности широковещания. Меньший массивbroadcast к размеру большего массива, чтобы они имели совместимые формы.
Трансляция возможна при соблюдении следующих правил:
Массив с меньшим ndim чем другой, предваряется «1» в его форме.
Размер в каждом измерении выходной формы является максимальным из входных размеров в этом измерении.
Входные данные могут использоваться в расчетах, если их размер в определенном измерении соответствует размеру выходных данных или его значение равно 1.
Если входной размер имеет размер 1, первая запись данных в этом измерении используется для всех вычислений по этому измерению.
Набор массивов называется broadcastable если приведенные выше правила дают допустимый результат и верно одно из следующих:
Массивы имеют точно такую же форму.
Массивы имеют одинаковое количество измерений, а длина каждого измерения равна либо общей длине, либо 1.
Массив, имеющий слишком мало размеров, может иметь перед формой размер длины 1, так что указанное выше свойство будет истинным.
Следующая программа показывает пример трансляции.
Пример 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.