Armadillo库中的sort_index()函数给出了错误的结果

时间:2016-02-27 17:20:55

标签: c++ armadillo

我正在尝试使用Armadillo C ++库(link here)中的sort_index()函数。

这是我的代码:

#include <armadillo>
#include <iostream>
using namespace arma;
using namespace std;

int main()
{
    vec test = {2, 5, 1};
    test.print();
    sort_index(test).print();
    cout<<"===\n";
    sort_index(test, "descend").print();

    return 0;
}

结果是:

2.0000
5.0000
1.0000
    2
    0
    1
===
    1
    0
    2

我认为下降顺序是正确的,但提升顺序是错误的。它似乎就像下降顺序的反映版本。这是一个错误吗?如果两个结果都正确,那么sort_index()实际上做了什么?

2 个答案:

答案 0 :(得分:0)

sort_index(test, "descend").print();

将按降序打印(最高位)。

sort_index(test, "ascend").print();

按升序打印(最小的第一个,降序的反映)默认情况下,在调用函数时使用。

这似乎有什么问题?查看sort_index() here的文档。

答案 1 :(得分:0)

结果是正确的。函数sort_index的工作方式与Python的numpy.argsort相同。它生成原始列表的索引以生成排序列表。

>>> import numpy as np
>>> x = np.array([2, 5, 1])
>>> idx = np.argsort(x); print(idx)
[2 0 1]
>>> x_sorted = x[idx]; print(x_sorted)
[1 2 5]