Функция sort_index () в библиотеке броненосца c ++ дает неверный результат - PullRequest
0 голосов
/ 28 января 2020

Я использую функцию sort_index () в c ++ armadillo, и, похоже, она не дает правильного результата:

входной вектор [3,4,2,1,5] сортирует оба направления

arma::sort_index(input, "ascend").print();
arma::sort_index(input, "descend").print();

и получите следующие результаты: [3,2,0,1,4] и [4,1,0,2,3]

, что ни является правильным. Сортировка в порядке возрастания должна дать [2,3,1,0,4] (дважды проверяется с помощью numpy.searchsorted, и это дает вышеуказанный результат).

--- Edit ---

Спасибо за ответы! Теперь я понимаю, что неправильно понял способ индексации sort_index. Я все еще пытаюсь найти эффективную, эквивалентную функцию, которая достигает np.searchsorted в c ++ ...

1 Ответ

1 голос
/ 28 января 2020

Документация Armadillo гласит, что

sort_index( X )
sort_index( X, sort_direction )
Возвращает вектор, который описывает отсортированный порядок элементов X (ie. Он содержит индексы элементов X)

Возвращенный вектор соответствует индексам элементов в исходном векторе X, что приведет к сортировке вектора.

Соответствующая функция в numpy равно argsort, а не searchsorted. Действительно, argsort из numpy даст то же решение, что и sort_index в броненосце.

В вашем примере [3,4,2,1,5] наименьший элемент находится в индексе 3, затем следует элемент в индексе 2, затем 0 и так одно. Другими словами, если вы тоже используете элементы X, используя индексы [3,2,0,1,4], вы получите вектор [1, 2, 3, 4, 5], который отсортирован по X.

...