火炬张量交换尺寸

时间:2015-06-29 22:29:22

标签: lua torch

我在火炬项目中遇到了这两行代码(背靠背):

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

这两条线做什么?我以为他们做了某种交换。

1 个答案:

答案 0 :(得分:4)

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的第三行(2D子矩阵)中的值分配给im4的第一行,第二行分配第一行im3im4的第三行。

请注意,这不是交换,因为永远不会写im3而且永远不会读取im4

相关问题