广播机制
数组在进行矢量化运算时,要求数组的形状是相等的。
当形状不相等的数组执行算术运算的时候,就会出现广播机制。
广播机制会对数组进行扩展,使数组的shape属性值一样,这样就可以进行矢量化运算了。
>>> arr1 = np.array([[0],[1],[2],[3]])
>>> arr2 = np.array([1,2,3])
>>> arr1+arr2
array([[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6]])
上述代码中,数组arr1是4行1列,arr2是1行3列。这两个数组要进行相加,按照广播机制会对数组arr1和arr2都进行扩展,使得数组arr1和arr2都变成4行3列。
- 广播机制需要扩展维度小的数组,使得它与维度最大的数组的
shape值
相同,以便使用元素级函数或者运算符进行运算。 - 两个数组可以进行运算只需要满足如下任意一个条件即可:
1. 两个数组的每个维度等长;
2. 其中一个数组的某一维度为1 。
*** 记忆图
二维数组(3, 4)
,实际上可以理解为(1, 3, 4)
一维数组(3, )
,实际上可以理解为(1, 3)
一维数组(4, )
,实际上可以理解为(1, 1, 4)
数组运算 | (2,) | (3,) | (4,) | (2,3) | (2,4) | (3,4) | (2,3,4) | (2,3,1) |
---|---|---|---|---|---|---|---|---|
(2,) | 可以 | - | - | - | - | - | - | - |
(3,) | - | 可以 | - | 可以 | - | - | - | - |
(4,) | - | - | 可以 | - | 可以 | 可以 | - | |
(2,3) | - | 可以 | - | 可以 | - | - | - | - |
(2,4) | - | - | - | - | 可以 | - | - | - |
(3,4) | - | - | 可以 | - | - | 可以 | 可以 | - |
(2,3,4) | - | - | 可以 | - | - | 可以 | 可以 | 可以 |
(2,3,1) | - | - | - | - | - | - | 可以 | 可以 |
虎啸提示:"-"表示不可以