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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM