0

我在 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索引的方式。我仍在尝试找到一个np.searchsorted在 c++ 中实现的高效、等效的功能......

4

1 回答 1

2

犰狳的文件指出

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

返回的向量对应于原始向量中元素的索引,X这将产生一个排序的向量。

numpy 中对应的函数 isargsort和 not 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排序的向量。

于 2020-01-28T01:13:28.203 回答