广播条件

  • 每一个tensor都至少有一维
  • 在对每一维进行逆序遍历(从尾开始)时,对应tensor的维度必须满足以下条件之一:
    • 维度大小相等
    • 维度大小为1
    • 其中之一不存在
1
2
3
4
5
6
7
8
x = torch.empty((3,4,1))
y = torch.empty((1,4,1))
(x+y).shape # 3,4,1

x = torch.empty((3,4,3))
y = torch.empty((3,3,3))
(x+y).shape # 报错4!=3 且!=1

广播流程

  • 首先判断是否满足广播条件.
  • 如果向量对应维度相等则跳过
  • 如果不等则对小的一方添加维度使得维度相等
1
2
3
4
5
6
7
8
9
10
x = torch.empty((5,1,3,4))
y = torch.empty((5,2,1,4))
#首先判断是否满足条件,4相等,3!=1但是存在1,1!=2但是存在1,5相等.所以满足广播条件
# 接下来对维度进行扩张
(x+y).shape
# 5,2,3,4

x = torch.empty((5,3,3,4))
y = torch.empty(( ,2,1,4))
# 不满足条件,报错 2!=3 且不存在1