【问题标题】:sort_index() function in c++ armadillo library gives wrong resultc ++犰狳库中的sort_index()函数给出错误的结果
【发布时间】:2020-01-27 23:13:36
【问题描述】:

我在 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] (用numpy.searchsorted 加倍检查并给出上述结果)。

--- 编辑---

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

【问题讨论】:

  • 您如何达到预期结果?最小的项目在索引3(值1),第二小的项目在索引2(值2),第三小的项目在索引0(值3)和以此类推。
  • 你的意思是你检查了numpy.argsort?你能发布你的预期结果,以及仔细检查它的 numpy 代码吗?
  • 看起来 sort_index[0] 正在为您提供将被排序到索引 0 的值的当前索引,而您期望它是当前位于索引 0 的值的排序索引,如果有意义的话

标签: c++ armadillo rcpparmadillo


【解决方案1】:

犰狳的文档指出

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 排序的。

【讨论】:

  • 啊,明白了!谢谢:)
  • 我正在尝试找到与searchsorted 等效的c++,是否有可以达到与searchsorted 相同结果的犰狳函数?
  • @segfault_101 犰狳中没有这样的功能,但犰狳并不专注于将元素插入现有向量。这样做也是低效的,因为在刚刚插入的元素之后的所有元素都需要移动。您可能希望为此使用不同的数据结构。
猜你喜欢
  • 1970-01-01
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多