Pytorch 政府有何建议?;操作员在Pytork中做了什么?为什么它会改变形状?

Pytorch 政府有何建议?;操作员在Pytork中做了什么?为什么它会改变形状?,pytorch,Pytorch,我的代码包含x和y,这两种类型都是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]) 为什么z30*9*9的形状在x&y之后?x的形状是30*1*9,y的形状是1*9*9,和在x&y中做了什么?我不确定,但我最好

我的代码包含
x
y
,这两种类型都是
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
之后?
x
的形状是30*1*9,
y
的形状是1*9*9,
x&y
中做了什么?

我不确定,但我最好的猜测是,数组中的每个项都取最大值。当然,请尝试在pytorch文档中查找&operator。希望这有帮助

这与
&
操作符无关,而是与Python中广播的工作方式有关。引用NumPy的话:

为了进行广播,操作中两个阵列的尾随轴的大小必须相同,或者其中一个必须为一

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

这将导致您的问题如下:

  • a
    的形状为30 x 1 x 9
  • b
    的形状为1 x 9 x 9
因此,结果如下所示:

  • result1
    a1
    ,因为
    a1>b1
  • result2
    b2
    ,因为
    a2
  • result3
    既是
    a3
    又是
    b3
    ,因为
    a3=b3
因此,
result
的形状为30 x 9 x 9

还请注意,
&
操作符实现了张量项的二进制编码