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

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

你有什么建议吗?

点赞
用户2726734
用户2726734

在 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
2015-07-08 23:20:33