【问题标题】:Torch / Lua, how to select a subset of an array or tensor?Torch / Lua,如何选择数组或张量的子集?
【发布时间】:2015-09-27 01:37:53
【问题描述】:

我正在研究 Torch/Lua,并且有一个包含 10 个元素的数组 dataset

dataset = {11,12,13,14,15,16,17,18,19,20}

如果我写dataset[1],我可以读取数组第一个元素的结构。

th> dataset[1]
11  

我只需要在所有 10 个元素中选择 3 个元素,但我不知道该使用哪个命令。 如果我在 Matlab 上工作,我会写:dataset[1:3],但这里不起作用。

你有什么建议吗?

【问题讨论】:

    标签: arrays lua torch


    【解决方案1】:

    在火炬中

    th> x = torch.Tensor{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    

    要选择一个范围,如前三个,请使用the index operator

    th> x[{{1,3}}]
    1
    2
    3
    

    其中 1 是“开始”索引,3 是“结束”索引。

    有关使用 Tensor.sub 和 Tensor.narrow 的更多替代方案,请参阅 Extracting Sub-tensors


    在 Lua 5.2 或更低版本中

    Lua 表,例如您的 dataset 变量,没有选择子范围的方法。

    function subrange(t, first, last)
      local sub = {}
      for i=first,last do
        sub[#sub + 1] = t[i]
      end
      return sub
    end
    
    dataset = {11,12,13,14,15,16,17,18,19,20}
    
    sub = subrange(dataset, 1, 3)
    print(unpack(sub))
    

    打印出来的

    11    12   13
    

    在 Lua 5.3 中

    在 Lua 5.3 中,您可以使用 table.move

    function subrange(t, first, last)
         return table.move(t, first, last, 1, {})
    end
    

    【讨论】:

    • 谢谢@rpattiso。但是如何用一个简单的表格来做呢?
    • @DavideChicco.it 查看创建新表的更新。如果您想避免复制值,可以使用 Lua 的迭代器或元表。如果您使用的是 Torch,张量会更加方便和高效。
    猜你喜欢
    • 2016-07-05
    • 2018-01-05
    • 2016-02-04
    • 2016-10-06
    • 2019-12-28
    • 2014-10-04
    • 2016-03-17
    • 2019-11-12
    • 2016-10-27
    相关资源
    最近更新 更多