Torch 中的双花括号语法

Double curly-brace syntax in Torch

我试图在使用 Torch 时更好地理解 Lua 中的语法:

local ten = torch.Tensor{{1,2,3},{4,5,6},{7,8,9}}

for i=1,(#ten)[2] do
    print(ten[i][{{2}}])
end

特别是行

    print(ten[i][{{2}}])

当我运行代码时,它打印

 2
[torch.DoubleTensor of size 1]

 5
[torch.DoubleTensor of size 1]

 8
[torch.DoubleTensor of size 1]

我熟悉 table 字面值及其基本语法,但是将“2”包裹在双花括号中的目的是什么,它在引擎中如何工作?

当我问同样的问题时,GitHub 上发布了以下答案: https://github.com/torch/torch7/issues/501#issuecomment-171290546


看看this part of the documentation

  • 当您有单个 curly-braces 时,您正在创建一个 selection of the tensor. So ten[{1}] is equivalent 到 10[1],这又等同于 ten:select(1,1)。如果你有几个像 ten[{1,2}] 这样的索引,这也等同于较慢的 ten[1][2](因为后者 return 是张量的 2 倍,而前者只是 return它一次)。如果你 select 一维张量,你的输出是一个数字。
  • 当你有 double curly-braces 时,它 return 是 narrow of the tensor,并且缩小的张量始终是张量(即使它只有一个元素)。使用 double curly-braces,您可以指定张量缩小的范围,而使用 single curly-braces 则无法做到这一点。例如,您可以做 10[{{1,2},1}],这将是一个 2 维的一维张量,如果您做 10[{{1,2},{2}}],它将 return 大小为 2x1 的二维张量。

有关详细信息,请查看 select and narrow。 最后一点,select 的文档并不完全正确,因为可以在一维张量上执行 select,并且输出是一个数字。