c++ 11实现 numpy argsort函数
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