术语 broadcasting 描述numpy如何在算术运算期间处理具有不同形状的数组。
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.])
我们可以将在算术运算期间被拉伸的标量b想象成具有与a相同形状的数组。 Numpy足够聪明,可以使用原始标量值,而无需实际制作副本,以便广播操作尽可能具有内存和计算效率(b是标量,而不是数组)
@Eric Duminil 在benchmarking中制作的小型another memory performance question,表明广播在速度和内存方面存在差异
但是,我引用上面链接的同一篇文章:
有些情况下广播是一个坏主意,因为它 导致内存使用效率低下,导致计算速度变慢
问题是:当广播使用不必要的大量内存并导致性能低下时? 换句话说,我们应该在纯广播approch上使用混合广播 / python循环算法吗?