双花括号语法在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]

我熟悉表面值及其基本语法,但是将'2'包装在双大括号中的目的是什么,它在引擎中如何工作?

点赞
用户350664
用户350664

以下回答是在我提出相同问题后 GitHub 上发布的: https://github.com/torch/torch7/issues/501#issuecomment-171290546


请查看文档的此部分

  • 当你有单花括号时,你创建了一个 张量的选择。因此, ten[{1}] 等价于 ten[1],后者又等价于 ten:select(1,1)。如果你有多个索引,比如 ten[{1,2}],这也等价于较慢的 ten[1][2](因为后者返回2倍的张量,而前者仅返回一次)。如果你对1D张量进行选择,输出是一个数字。
  • 当你有双花括号时,它会返回一个张量的缩小,并且缩小的张量总是一个张量(即使它只有一个元素)。使用双花括号,你可以指定张量将缩小的范围,这是单花括号不能实现的。例如,你可以做 ten[{{1,2},1}],这将是一个2维张量的1D张量,如果你做 ten[{{1,2},{2}}],它将返回大小为2x1的2D张量。

更多信息,请查看selectnarrow。 最后注意一点,select的文档不完全正确,因为它也可以对1D张量进行选择,输出是一个数字。

2016-01-13 15:39:35