我在c++ armadillo中使用了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。
-编辑
谢谢你的回复!我现在意识到我误解了sort_index的索引方式。我仍然在努力寻找一个有效的、等价的函数来在c++中实现np.searchsorted……
发布于 2020-01-28 09:13:28
Armadillo的文档指出
sort_index( X )
sort_index( X, sort_direction )
返回一个向量,它描述了X的元素的排序顺序(即。它包含X的元素的索引)
返回的向量对应于原始向量X中的元素的索引,这将导致一个排序的向量。
numpy中对应的函数是argsort,而不是searchsorted。事实上,来自numpy的argsort将会给出与sort_index在armadillo中相同的解决方案。
在您的示例[3,4,2,1,5]中,最小的元素在索引3中,后跟索引2中的元素,然后是0,以此类推。换句话说,如果您在X中使用索引[3,2,0,1,4]对元素进行操作,您将得到向量[1, 2, 3, 4, 5],它是按X排序的。
https://stackoverflow.com/questions/59940216
复制相似问题