&运算符在PyTorch中做什么,为什么会改变形状?

时间:2019-01-04 01:55:48

标签: pytorch

我有包含xy这两种类型的代码。他们的形状是

torch.autograd.variable.Variable

我不明白的是,为什么以下结果会产生不同的大小/形状

torch.Size([30, 1, 9])
torch.Size([1, 9, 9])

输出

z = x & y
print(z.shape)

为什么torch.Size([30, 9, 9]) 之后z的形状为30 * 9 * 9? x & y的形状为30 * 1 * 9,x的形状为1 * 9 * 9,y&中做什么?

2 个答案:

答案 0 :(得分:3)

这与&运算符无关,但与Python中广播的工作方式无关。在NumPy中引用Eric Wieser's excellent documentation on broadcasting

  

为了进行广播,操作中两个数组的尾轴尺寸必须相同,或者其中之一必须相同。

请参见以下引用页面的图片作为示例:

Broadcasting of tensors of different shape.

这将导致您的问题如下:

  • a的形状为30 x 1 x 9
  • b的形状为1 x 9 x 9

因此,结果是这样创建的:

  • result1a1,因为a1 > b1
  • result2b2,因为a2 < b2
  • result3既是a3又是b3,因为a3 = b3

因此,result的形状为30 x 9 x 9。

还请注意,&运算符对张量项的二进制编码实现logical conjunction

答案 1 :(得分:-1)

我不确定,但是我最好的猜测是&取数组中每个项目的最大值。可以肯定的是,尝试在pytorch文档中查找&运算符。希望这会有所帮助!