broadcasting
# 按照尾部维度对齐
x=torch.ones(5,1,4,2)
y=torch.ones(3,1,1)
(x+y).size()
torch.Size([5, 3, 4, 2])
- 首先按尾部维度对齐 即1对2,1对4,3对1,然后没有维度能对5,就补一个维度,size为1,则1对5
- 每一对中,如果两个数字不一样,那么就把1变成另一个,比如说第一对是1对2,那么就把1变成2(代表着y在最后一个维度(列)上copy了一次)
又比如3对1,那么就把1变成3(代表着x在第二个维度上copy了两次)
1对5,那么就把1变成5(这个1是新增加的维度,所以1变成5就代表着把y再copy4次) - PS:如果一对数字中,两个数字不同,并且又没有1,那么就会报错
a = torch.arange(6).reshape