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

问题描述 投票:0回答:2

我正在开发 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
2个回答
19
投票

火炬手

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

0
投票

那又如何

dataset = {11,12,13,14,15,16,17,18,19,20}
subdata = { unpack( dataset, 1, 3 ) }

它复制了数据集1到3的值,因此原始数据集无法通过子数据进行修改。在这方面,这与张量解不同。也许在你的情况下,副本就足够了。

© www.soinside.com 2019 - 2024. All rights reserved.