什么时候广播是个坏主意?(纽比)

2024-09-28 22:22:35 发布

您现在位置:Python中文网/ 问答频道 /正文

术语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 Duminilanother memory performance question中制作的一个小的benchmarking,表明广播在速度和内存方面有不同

不过,我引用了上面链接的同一篇文章:

There are, cases where broadcasting is a bad idea because it leads to inefficient use of memory that slows computation

问题是:当广播使用不必要的大量内存而导致性能低下时? 换言之,当我们应该在纯广播方法上使用混合广播/python循环算法时?在


Tags: to内存fromimportnumpyexample算术数组