火炬张量交换尺寸
Torch tensors swapping dimensions
我在火炬项目中遇到了这两行(背靠背)代码:
im4[{1,{},{}}] = im3[{3,{},{}}]
im4[{3,{},{}}] = im3[{1,{},{}}]
这两行是做什么的?我以为他们做了某种交换。
中的索引中有所介绍
使用空 table {}
的索引对于该维度中的所有索引都是 shorthand。下面是一个使用 {}
将整行从一个矩阵复制到另一个矩阵的演示:
> 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
的第一行,第二行将[=16的第一行赋值=]到im4
的第三行。
请注意,这不是交换,因为 im3
从未被写入并且 im4
从未被读取。
我在火炬项目中遇到了这两行(背靠背)代码:
im4[{1,{},{}}] = im3[{3,{},{}}]
im4[{3,{},{}}] = im3[{1,{},{}}]
这两行是做什么的?我以为他们做了某种交换。
使用空 table {}
的索引对于该维度中的所有索引都是 shorthand。下面是一个使用 {}
将整行从一个矩阵复制到另一个矩阵的演示:
> 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
的第一行,第二行将[=16的第一行赋值=]到im4
的第三行。
请注意,这不是交换,因为 im3
从未被写入并且 im4
从未被读取。