Python 有没有一种方法可以减少从一维向量中找到前k个最大元素的索引所需的时间?

Python 有没有一种方法可以减少从一维向量中找到前k个最大元素的索引所需的时间?,python,time-complexity,pytorch,Python,Time Complexity,Pytorch,我试图获得Pytorch中数组的最大n个元素和最小n个元素的索引,然后将这些元素连接到一个返回数组中,但是由于数组的大小呈指数增长,这样做所需的时间非常不合理 我已经尝试了包含的代码,以及对向量进行排序,这样我就可以只取第一个和最后的n个元素,但是时间没有减少,我丢失了向量的索引,这正是我所需要的 def绘图(n,分布): 返回np.concatenate((np.array(distr.topk,k=int(n),max=True).index), 数组(distr.topk(k=int(n)

我试图获得Pytorch中数组的最大n个元素和最小n个元素的索引,然后将这些元素连接到一个返回数组中,但是由于数组的大小呈指数增长,这样做所需的时间非常不合理

我已经尝试了包含的代码,以及对向量进行排序,这样我就可以只取第一个和最后的n个元素,但是时间没有减少,我丢失了向量的索引,这正是我所需要的

def绘图(n,分布):
返回np.concatenate((np.array(distr.topk,k=int(n),max=True).index),
数组(distr.topk(k=int(n),max=False).index)),
轴=0)

对于一系列一维数组,大小从长度10到长度2359296不等;此外,变量n是一个整数,值为数组长度的1/10。我的计算机可以在大约0.5秒内计算出所有数组中最大和最小n个元素的索引。我希望尽可能地减少这一时间,最好是少于0.2秒

您应该使用
torch.topk(x,k)



也许您应该在不重复出现的情况下进行排序,然后从排序中获取n/size元素并表示索引!
k=2
x = torch.arange(0,10).resize_((2,5))
print(x)
print("...")
res, ind = torch.topk(x,k)
print(res)
tensor([[0, 1, 2, 3, 4],
        [5, 6, 7, 8, 9]])
...
tensor([[4, 3],
        [9, 8]])