从torch.Tensor中删除项目

我有以下用Lua编写的代码。

我想从scores中获取N个最高分数的索引及其相应的分数。

似乎我需要逐步从scores中删除当前最大值并重新获取最大值,但找不到适当的方法来完成。

nqs=dataset['question']:size(1);
scores=torch.Tensor(nqs,noutput);
qids=torch.LongTensor(nqs);
for i=1,nqs,batch_size do
    xlua.progress(i, nqs)
    r=math.min(i+batch_size-1,nqs);
    scores[{{i,r},{}}],qids[{{i,r}}]=forward(i,r);
--    print(scores)
end

tmp,pred=torch.max(scores,2);
点赞
用户1866656
用户1866656

希望我没有误解,因为你展示的代码(特别是循环)似乎并不与你想要做的事情相关。无论如何,以下是我会这样做。

 sr=scores:view(-1,scores:size(1)*scores:size(2))
 val,id=sr:sort()
 --val是一个按升序存储值的行向量
 --id将是sr中对应的索引
 --现在您可以从末尾切片val和id以找到您想要的N个值,然后使用以下方法仅仅是恢复在分数矩阵中的原始指数:
 col=(index-1)%scores:size(2)+1
 row=math.ceil(index/scores:size(2))

希望这会有帮助。

2017-07-29 19:06:30