NumPy - Difusión
El termino broadcastingse refiere a la capacidad de NumPy para tratar matrices de diferentes formas durante las operaciones aritméticas. Las operaciones aritméticas en matrices generalmente se realizan en elementos correspondientes. Si dos matrices tienen exactamente la misma forma, estas operaciones se realizan sin problemas.
Ejemplo 1
import numpy as np
a = np.array([1,2,3,4])
b = np.array([10,20,30,40])
c = a * b
print c
Su salida es la siguiente:
[10 40 90 160]
Si las dimensiones de dos matrices son diferentes, las operaciones de elemento a elemento no son posibles. Sin embargo, las operaciones en matrices de formas no similares todavía son posibles en NumPy, debido a la capacidad de transmisión. La matriz más pequeña esbroadcast al tamaño de la matriz más grande para que tengan formas compatibles.
La transmisión es posible si se cumplen las siguientes reglas:
Array con más pequeño ndim que el otro se antepone con '1' en su forma.
El tamaño en cada dimensión de la forma de salida es el máximo de los tamaños de entrada en esa dimensión.
Una entrada se puede utilizar en el cálculo, si su tamaño en una dimensión particular coincide con el tamaño de salida o su valor es exactamente 1.
Si una entrada tiene un tamaño de dimensión de 1, la primera entrada de datos en esa dimensión se utiliza para todos los cálculos a lo largo de esa dimensión.
Se dice que un conjunto de matrices es broadcastable si las reglas anteriores producen un resultado válido y se cumple una de las siguientes:
Las matrices tienen exactamente la misma forma.
Las matrices tienen el mismo número de dimensiones y la longitud de cada dimensión es una longitud común o 1.
Una matriz que tiene muy pocas dimensiones puede tener su forma antepuesta con una dimensión de longitud 1, de modo que la propiedad indicada anteriormente sea cierta.
El siguiente programa muestra un ejemplo de transmisión.
Ejemplo 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
El resultado de este programa sería el siguiente:
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.]]
La siguiente figura demuestra cómo array b se transmite para ser compatible con a.