Torch中的双重大括号语法

时间:2016-01-12 15:57:58

标签: syntax lua 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'的目的是什么?在双花括号中,它在引擎中如何工作?

1 个答案:

答案 0 :(得分:1)

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

查看this part of the documentation

  • 当你有一个大括号时,你正在创建一个selection of the tensor。所以十[{1}]是equivalent到十[1],这相当于十:select(1,1)。如果你有几个索引,比如10 [{1,2}],这也等于慢十[1] [2](因为后者返回张量的2倍,而前者只返回一次)。如果选择1D张量,则输出为数字。
  • 当你有双花括号时,它返回一个narrow of the tensor,一个变窄的张量总是一个张量(即使它只有一个元素)。使用双花​​括号,您可以指定张力将缩小的范围,这对于单个花括号是不可能的。例如,您可以执行10 [{{{1,2},1}],这将是维度2的1D张量,如果您执行10 [{{1,2},{2}}],它将返回尺寸为2x1的2D张量。

有关详细信息,请查看selectnarrow。 最后一点,选择的文档并不完全正确,因为可以在1D张量上进行选择,输出是一个数字。