C++ 犰狳库中的sort_index()函数给出了错误的结果

sort_index() function in c++ armadillo library gives wrong result

本文关键字:函数 结果 错误 index sort C++      更新时间:2023-10-16

我在 c++ 犰狳中使用 sort_index(( 函数,它似乎没有给出正确的结果:

输入向量为 [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加倍检查,它给出了上述结果(。

---编辑---

感谢您的回复!我现在意识到我误解了sort_index索引的方式。我仍在尝试找到一个高效的、等效的函数,可以在 c++ 中实现np.searchsorted......

犰狳的文档指出


sort_index( X )sort_index( X, sort_direction )
返回一个向量,它描述了 X 元素的排序顺序(即它包含 X 元素的索引(

返回的向量对应于原始向量X中元素的索引,这将导致排序向量。

numpy 中的相应函数是argsort而不是searchsorted。事实上,来自numpy的argsort将给出与犰狳sort_index相同的解决方案。

在您的示例中[3,4,2,1,5]最小的元素位于索引 3 中,由索引 2 中的元素组成,然后是 0,依此类推。换句话说,如果你也使用索引X中的元素[3,2,0,1,4]你会得到向量[1, 2, 3, 4, 5],这是X排序的。