Python Pytorch和numpy广播规则的差异?
我用torch做了一些实验,以下是我的发现:Python Pytorch和numpy广播规则的差异?,python,numpy,pytorch,Python,Numpy,Pytorch,我用torch做了一些实验,以下是我的发现: (5,7,3)和(5,7,3)->(5,7,3)-相等 (5,3,4,1)和(5,3,1,1)->(5,3,4,1)-一个dim为1 (5,3,4,1)和(3,4,1)->(5,3,4,1)-一个dim不存在 (5,3,4,1)和(3,1,1)->(5,3,4,1)-一个dim为1,一个不存在 (4,3,2)和(5,4,1,1)->(5,4,3,2) (4,1)和(5,3,1,1)->(5,3,4,1)-一个dim为1,两个dim不存在 (1)和(
-相等(5,7,3)和(5,7,3)->(5,7,3)
-一个dim为1(5,3,4,1)和(5,3,1,1)->(5,3,4,1)
-一个dim不存在(5,3,4,1)和(3,4,1)->(5,3,4,1)
-一个dim为1,一个不存在(5,3,4,1)和(3,1,1)->(5,3,4,1)
(4,3,2)和(5,4,1,1)->(5,4,3,2)
-一个dim为1,两个dim不存在(4,1)和(5,3,1,1)->(5,3,4,1)
-一个dim为1,其他dim不存在(1)和(5,3,4,2)->(5,3,4,2)
-标量和张量()和(5,3,4,2)->(5,3,4,2)
-空张量和张量(0)和(5,3,2,1)->(5,3,2,0)
-缺少的dim为1(4,1)和(4)->(4,4)
->不可广播(4,2)和(4)
->不可广播(5,2,1)和(5,3,2,1)
->不可广播(5,3,2,1)和(5,3,2)
torch.empty(3,4)+torch.tensor(42)
工作得很好(scalar没有维度)
我发现的规则是:
- 从尾部尺寸开始,尺寸标注必须相等,或者其中一个尺寸标注应为1(对于缺少的第一个尺寸标注,假定为1)
- 对于每个dim,生成的dim是两个dim中的最大值
- 在位操作不允许在位张量改变形状
如果有人能提供证据,或者至少能证明numpy与pytorch有相同的规则,那么我将不胜感激,因为我不必研究numpy的广播行为。看起来“标量张量”案例中有一个拼写错误。所有的例子都是我所期望的
numpy
。我认为有两条规则:1)添加前导1以匹配维度数,2)缩放所有1以匹配。@hpaulj谢谢。你的2条规则比文档中的规则更简单,当然也更全面。你的意思是在文档中还是在我的示例中(torch.tensor(42).size()
istorch.size([])
)?()和(5,3,4,2)->(5,3,4,2)-标量和张量