数组广播
数组在进行矢量化运算时,要求数组的形状是相等的。当形状不相等的数组执行算术计算的时候,就会出现广播机制,该机制会对数组进行扩展,使数组的shape属性值一样,这样就可以进行矢量化运算了。下面来看一个例子。
In [40]: import numpy as np
In [41]: arr1 = np.array([[0], [1], [2], [3]])
In [42]: arr1.shape
Out[42]: (4, 1)
In [43]: arr2 = np.array([1, 2, 3])
In [44]: arr2.shape
Out[44]: (3,)
In [45]: arr1 + arr2
Out[45]:
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
上述代码中,数组arr1的shape是(4,1),arr2的shape是(3,),这两个数组要是进行相加,按照广播机制会对数组arr1和arr2都进行扩展,使得数组arr1和arr2的shape都变成(4,3)。
下面通过一张图来描述广播机制扩展数组的过程,具体如图1所示。
图1 数组广播机制
注意:
广播机制实现了对两个或两个以上数组的运算,即使这些数组的shape不是完全相同的,只需要满足如下任意一个条件即可:
(1)两个数组的某一维度等长。
(2)其中一个数组为一维数组。
广播机制需要扩展维度小的数组,使得它与维度最大的数组的shape值相同,以便使用元素级函数或者运算符进行运算。