numpy的函数确实很强大,随随便便一个函数就需要c++很多代码去实现。
今天刚好看到argsort函数,就找了一下c++实现。
#include <iostream>
#include <random>
#include <algorithm>
// 实现argsort功能
template<typename T> std::vector<int> argsort(const std::vector<T>& array)
{
const int array_len(array.size());
std::vector<int> array_index(array_len, 0);
for (int i = 0; i < array_len; ++i)
array_index[i] = i;
std::sort(array_index.begin(), array_index.end(),
[&array](int pos1, int pos2) {return (array[pos1] < array[pos2]); });
return array_index;
}
int main()
{
std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(1, 20);
std::vector<int> vec_data;
for (int i = 0; i < 10; ++i)
vec_data.push_back(distribution(generator));
for (int item : vec_data)
std::cout << item << "\t";
std::vector<int> index = argsort(vec_data);
std::cout << std::endl;
for (int item : index)
std::cout << item << "\t";
system("pause");
}
输出结果,第一行是原始数据,第二行是排序后索引,可见满足升序索引,1对应3,9对应4,4对应5 ……。
13 3 15 6 5 12 10 6 19 4
1 9 4 3 7 6 5 0 2 8
参考:https://blog.csdn.net/m_buddy/article/details/86262717
原文链接: https://www.cnblogs.com/juluwangshier/p/13343734.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/200633
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!