Lua 火炬张量交换维数

Lua 火炬张量交换维数,lua,torch,Lua,Torch,我在火炬项目中遇到了这两行代码(背靠背): im4[{1,{},{}}] = im3[{3,{},{}}] im4[{3,{},{}}] = im3[{1,{},{}}] 这两条线是干什么的?我假设他们做了某种交换。这在 使用空表{}编制索引是该维度中所有索引的简写。下面是一个演示,它使用{}将整行从一个矩阵复制到另一个矩阵: > a = torch.Tensor(3, 3):fill(0) 0 0 0 0 0 0 0 0 0 > b = tor

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

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

这两条线是干什么的?我假设他们做了某种交换。

这在

使用空表
{}
编制索引是该维度中所有索引的简写。下面是一个演示,它使用
{}
将整行从一个矩阵复制到另一个矩阵:

> 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
的第一行,第二行将
im3
的第一行分配给
im4
的第三行


请注意,这不是交换,因为从不写入
im3
,也从不从中读取
im4

这在

使用空表
{}
编制索引是该维度中所有索引的简写。下面是一个演示,它使用
{}
将整行从一个矩阵复制到另一个矩阵:

> 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
的第一行,第二行将
im3
的第一行分配给
im4
的第三行


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

torch是否具有恒定的表文字?在torch中,
{}=={}
是否返回true?因为如果没有这一点,那么使用
=nil
作为这两行的右侧实际上没有什么不同。torch是否具有恒定的表文本?在torch中,
{}=={}
是否返回true?因为如果没有它,那么使用
=nil
作为这两行的右侧实际上没有什么不同。