我有包含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
的形状为30 * 1 * 9,x
的形状为1 * 9 * 9,y
在&
中做什么?
答案 0 :(得分:3)
这与&
运算符无关,但与Python中广播的工作方式无关。在NumPy中引用Eric Wieser's excellent documentation on broadcasting:
为了进行广播,操作中两个数组的尾轴尺寸必须相同,或者其中之一必须相同。
请参见以下引用页面的图片作为示例:
这将导致您的问题如下:
a
的形状为30 x 1 x 9 b
的形状为1 x 9 x 9 因此,结果是这样创建的:
result1
是a1
,因为a1 > b1
result2
是b2
,因为a2 < b2
result3
既是a3
又是b3
,因为a3 = b3
因此,result
的形状为30 x 9 x 9。
还请注意,&
运算符对张量项的二进制编码实现logical conjunction。
答案 1 :(得分:-1)
我不确定,但是我最好的猜测是&取数组中每个项目的最大值。可以肯定的是,尝试在pytorch文档中查找&运算符。希望这会有所帮助!