2015-06-29 38 views
0

我碰到这两条线来(背到后端)在火炬项目的代码:火炬张量交换尺寸

im4[{1,{},{}}] = im3[{3,{},{}}] 
im4[{3,{},{}}] = im3[{1,{},{}}] 

什么这两行吗?我认为他们做了某种交换。

+0

火炬是否有固定的表格文字?火炬中的{} == {}'是否返回true?因为如果没有那么有效,那么使用'= nil'作为这两行的右边。 –

回答

5

这会在索引中使用空表{}Torch Tensor Documentation

索引是该维度的所有指标的简写。下面是使用{}一整行从一个矩阵复制到另一个演示:

> a = torch.Tensor(3, 3):fill(0) 
    0 0 0 
    0 0 0 
    0 0 0 

> b = torch.Tensor(3, 3) 
> for i=1,3 do for j=1,3 do b[i][j] = (i - 1) * 3 + j end end 
> b 
    1 2 3 
    4 5 6 
    7 8 9 

> a[{1, {}}] = b[{3, {}}] 
> a 
    7 8 9 
    0 0 0 
    0 0 0 

这种分配等同于:a[1] = b[3]

你的例子是类似的:

im4[{1,{},{}}] = im3[{3,{},{}}] 
im4[{3,{},{}}] = im3[{1,{},{}}] 

其更清楚地表述为:

im4[1] = im3[3] 
im4[3] = im3[1] 

第一行从im3的第三行(一个二维子矩阵),以分配的值im4的第一行,第二行将im3的第一行分配给im4的第三行。

请注意,这不是交换,因为im3从不写入,并且im4从不读取。