广播是个坏主意吗? (numpy的)

时间:2017-11-15 14:20:26

标签: python numpy numpy-broadcasting

术语 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循环算法吗?

0 个答案:

没有答案