从一维张量中提取前 k 个值索引
Extracting the top-k value-indices from a 1-D Tensor
给定 Torch 中的一维张量 (torch.Tensor
),其中包含可以比较的值(比如浮点数),我们如何提取 top-k[ 的索引=16=] 该张量中的值?
除了暴力方法,我正在寻找一些 API 调用,Torch/lua 提供,可以有效地执行此任务。
只需遍历张量和运行你的比较:
require 'torch'
data = torch.Tensor({1,2,3,4,505,6,7,8,9,10,11,12})
idx = 1
max = data[1]
for i=1,data:size()[1] do
if data[i]>max then
max=data[i]
idx=i
end
end
print(idx,max)
--编辑--
回应您的编辑:使用此处记录的 torch.max 操作:https://github.com/torch/torch7/blob/master/doc/maths.md#torchmaxresval-resind-x-dim ...
y, i = torch.max(x, 1) returns the largest element in each column (across rows) of x, and a Tensor i of their corresponding indices in x
截至拉取请求 #496 Torch now includes a built-in API named torch.topk
。示例:
> t = torch.Tensor{9, 1, 8, 2, 7, 3, 6, 4, 5}
-- obtain the 3 smallest elements
> res = t:topk(3)
> print(res)
1
2
3
[torch.DoubleTensor of size 3]
-- you can also get the indices in addition
> res, ind = t:topk(3)
> print(ind)
2
4
6
[torch.LongTensor of size 3]
-- alternatively you can obtain the k largest elements as follow
-- (see the API documentation for more details)
> res = t:topk(3, true)
> print(res)
9
8
7
[torch.DoubleTensor of size 3]
在撰写本文时,CPU 实现遵循 sort and narrow approach (there are plans to improve it in the future). That being said an optimized GPU implementation for cutorch is currently being reviewed。
您可以使用topk函数。
例如:
import torch
t = torch.tensor([5.7, 1.4, 9.5, 1.6, 6.1, 4.3])
values,indices = t.topk(2)
print(values)
print(indices)
结果:
tensor([9.5000, 6.1000])
tensor([2, 4])
给定 Torch 中的一维张量 (torch.Tensor
),其中包含可以比较的值(比如浮点数),我们如何提取 top-k[ 的索引=16=] 该张量中的值?
除了暴力方法,我正在寻找一些 API 调用,Torch/lua 提供,可以有效地执行此任务。
只需遍历张量和运行你的比较:
require 'torch'
data = torch.Tensor({1,2,3,4,505,6,7,8,9,10,11,12})
idx = 1
max = data[1]
for i=1,data:size()[1] do
if data[i]>max then
max=data[i]
idx=i
end
end
print(idx,max)
--编辑-- 回应您的编辑:使用此处记录的 torch.max 操作:https://github.com/torch/torch7/blob/master/doc/maths.md#torchmaxresval-resind-x-dim ...
y, i = torch.max(x, 1) returns the largest element in each column (across rows) of x, and a Tensor i of their corresponding indices in x
截至拉取请求 #496 Torch now includes a built-in API named torch.topk
。示例:
> t = torch.Tensor{9, 1, 8, 2, 7, 3, 6, 4, 5}
-- obtain the 3 smallest elements
> res = t:topk(3)
> print(res)
1
2
3
[torch.DoubleTensor of size 3]
-- you can also get the indices in addition
> res, ind = t:topk(3)
> print(ind)
2
4
6
[torch.LongTensor of size 3]
-- alternatively you can obtain the k largest elements as follow
-- (see the API documentation for more details)
> res = t:topk(3, true)
> print(res)
9
8
7
[torch.DoubleTensor of size 3]
在撰写本文时,CPU 实现遵循 sort and narrow approach (there are plans to improve it in the future). That being said an optimized GPU implementation for cutorch is currently being reviewed。
您可以使用topk函数。
例如:
import torch
t = torch.tensor([5.7, 1.4, 9.5, 1.6, 6.1, 4.3])
values,indices = t.topk(2)
print(values)
print(indices)
结果:
tensor([9.5000, 6.1000])
tensor([2, 4])