Torch / Lua,如何选择数组或张量的子集?

11

我正在使用 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],但这里不起作用。

您有任何建议吗?

1个回答

19

在Torch中

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

要选择一个范围,比如前三个,使用索引运算符

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

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

更多使用Tensor.sub和Tensor.narrow的备选方案请参见提取子张量


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
@DavideChicco.it 看更新的内容,可以创建一个新表。如果你想避免复制值,可以使用Lua的迭代器或元表。如果你正在使用torch,张量更方便、高效。 - ryanpattison

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接