Quando transmitir é uma má ideia? (entorpecido)
O termoradiodifusão descreve como numpy trata matrizes com formas diferentes durante operações aritméticas.
Example 1:
from numpy import array
a = array([1.0,2.0,3.0])
b = array([2.0,2.0,2.0]) # multiply element-by-element ()
a * b
>> array([ 2., 4., 6.])
Example 2 :
from numpy import array
a = array([1.0,2.0,3.0])
b = 2.0 # broadcast b to all a
a * b
>>array([ 2., 4., 6.])
Podemos pensar no b escalar sendo esticado durante a operação aritmética em uma matriz com a mesma forma que a. O Numpy é inteligente o suficiente para usar o valor escalar original sem realmente fazer cópias, para que as operações de transmissão sejam tão eficientes quanto possível em termos de memória e computação (b é um escalar, não uma matriz)
Um pequenoavaliação comparativa feito por@Eric Duminil nooutra questão de desempenho de memória, mostra que a transmissão faz diferença em termos de velocidade e memória
No entanto, estou citando o mesmo artigo vinculado acima:
Existem casos em que a transmissão é uma má ideia, porque leva ao uso ineficiente da memória que atrasa a computação
A pergunta é: quando a transmissão usa quantidades desnecessariamente grandes de memória e resulta em desempenho lento? Em outros termos, quando devemos usartransmissão híbrida/ looping python sobre o método de transmissão pura?