火炬/Lua,如何select一个数组或张量的子集?

Torch / Lua, how to select a subset of an array or tensor?

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

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

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

th> dataset[1]
11  

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

你有什么建议吗?

在火炬中

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

到select一个范围,和前三个一样,使用the index operator:

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

其中 1 是 'start' 索引,3 是 'end' 索引。

请参阅 Extracting Sub-tensors 了解更多使用 Tensor.sub 和 Tensor.narrow

的替代方案

在Lua 5.2以下

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

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

在Lua5.3

在Lua 5.3中你可以使用table.move.

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