Я пытаюсь получить индексы самого большого n и наименьшего n элементов массива в Pytorch, а затем объединить эти элементы в возвращаемый массив, но время, необходимое для этого, крайне необоснованно, так как размер массив увеличивается в геометрической прогрессии.
Я попробовал включенный код, а также отсортировал вектор, чтобы я мог просто взять первый и последний n элементов, но время не уменьшается, и я теряю индексы вектора, что мне и нужно.
def draw(n, distr):
return np.concatenate((np.array(distr.topk(k=int(n), largest=True).indices),
np.array(distr.topk(k=int(n), largest=False).indices)),
axis=0)
Для серии одномерных массивов, различающихся по размеру от длины 10 до длины 2359296; кроме того, переменная n представляет собой целое число, значение которого составляет 1/10 длины массива. Мой компьютер может вычислить индексы самых больших и самых маленьких n элементов всех массивов примерно за 0,5 секунды. Я бы предпочел свести это время к минимуму, насколько это возможно, желательно до менее чем 0,2 секунды