1. 通用的broadcasting準則
broadcasting的前提是運算是通過element-wise的運算
- 從尾部開始依次比較維度
- 是否相等
- 是否其中一個維度爲1
- 依次進行比較,如果相等則跳過,如果不相等並且其中一個爲1則可以進行broadcasting
例子:
# 可以進行broadcasting的例子
#一個圖片的大小爲: 2*2
# 乘以一個scalar 1*1 結果爲2*2
a = np.arange(2*2).reshape(2,2)
b = a * 2
print(a) # [[0, 2], [4, 6]]
a (2,3)
b (3)
#不可以進行broadcasting的例子
a (2,3)
b (3,4)
#那怎麼進行broadcasting呢
a = np.arange(3).reshape(3, 1) # [[0], [1], [2]] shape = [3, 1]
b = np.ones(2) # [1, 1] shape = (2)
a + b
# 則 a broadcasting行,b broadcating列,如下
a --> shape = (3,2) b ---> shape = (3, 2)
a = [[0, 0],[1, 1],[2, 2]]
b = [[1, 1],[1, 1],[1, 1]]
所以a + b等於
[[1 , 1], [2, 2], [3, 3 ]]