两个向量要是broadcast的话,必须满足以下两个条件
(1)每个tensor至少是一维的
(2)两个tensor的维数从后往前,对应的位置要么是相等的,要么其中一个是1,或者不存在
>>> x=torch.empty(5,7,3)
>>> y=torch.empty(5,7,3)
# 相同维数的tensor一定是broadcastable的
>>> x=torch.empty((0,))
>>> y=torch.empty(2,2)
# 不是broadcastable的,因为每个tensor维数至少要是1
>>> x=torch.empty(5,3,4,1)
>>> y=torch.empty( 3,1,1)
# 是broadcastable的,因为从后往前看,一定要注意是从后往前看!
# 第一个维度都是1,相等,满足第二个条件
# 第二个维度其中有一个是1,满足第二个条件
# 第三个维度都是3,相等,满足第二个条件
# 第四个维度其中有一个不存在,满足第二个条件
# 但是
>>> x=torch.empty(5,2,4,1)
>>> y=torch.empty( 3,1,1)
# 不是broadcastable的,因为从后往前看第三个维度是不match的 2!=3,且都不是1