Torch / Lua,如何选择数组或张量的子集?
Posted
技术标签:
【中文标题】Torch / Lua,如何选择数组或张量的子集?【英文标题】:Torch / Lua, how to select a subset of an array or tensor? 【发布时间】: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]
,但这里不起作用。
你有什么建议吗?
【问题讨论】:
【参考方案1】:在火炬中
th> x = torch.Tensor1, 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,张量会更加方便和高效。以上是关于Torch / Lua,如何选择数组或张量的子集?的主要内容,如果未能解决你的问题,请参考以下文章