Armadillo 库中的 sort_index() 函数给出了错误的结果
sort_index() function in Armadillo library gives wrong result
我正在尝试使用 Armadillo C++ 库中的 sort_index()
函数 (link here)。
这是我的代码:
#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()
实际上做了什么?
sort_index(test, "descend").print();
将按降序打印(从高到高)。
sort_index(test, "ascend").print();
按升序打印(从小到大,降序的反映)这是调用函数时默认使用的。
这似乎有什么问题?查看 sort_index()
here.
的文档
结果正确。函数 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]
我正在尝试使用 Armadillo C++ 库中的 sort_index()
函数 (link here)。
这是我的代码:
#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()
实际上做了什么?
sort_index(test, "descend").print();
将按降序打印(从高到高)。
sort_index(test, "ascend").print();
按升序打印(从小到大,降序的反映)这是调用函数时默认使用的。
这似乎有什么问题?查看 sort_index()
here.
结果正确。函数 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]