• c++读写csv


    由于人脸测试需要,我计划通过csv文件来保存人脸的特征向量

    每一个人脸的特征向量有128维,测试存放5000个,所以csv是5000*128的浮点数

    先随机生成数据,每一维都落在(-1.0,1.0)之间

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include <algorithm>
    #include <random>
    using namespace std;
    
    int main(){
        std::random_device rd; //obtain a seed
        std::mt19937 gen(rd()); //mersenne_twister_engine 
        std::uniform_real_distribution<> dist(-1.0, 1.0);
        
        ofstream outFile;
        outFile.open("test5000.csv", ios::out); 
        // 5000*128
        for(int i=1;i<=5000;i++){
            for(int j=1;j<=127;j++){
                outFile << dist(gen) << ',';
            }
            outFile <<dist(gen) <<endl;
        }
        outFile.close();
    }    

    读取数据到二维向量a:

    #include <iostream>
    #include <fstream>
    #include <string>
    #include <vector>
    #include<algorithm>
    using namespace std;
     
    vector<vector<float> >a;  //二维数组存储读入变量
    vector<float>b;
     
    inline void file_to_string(vector<string> &record, const string& line, char delimiter);
    inline float string_to_float(string str);
     
    void read()
    {
        vector<string> row;
        string line;
        string filename;
        ifstream in("test5000.csv");  
        if (in.fail())  { cout << "File not found" <<endl; return ; } 
        while(getline(in, line)  && in.good() )
        {
            file_to_string(row, line, ',');  //把line里的单元格数字字符提取出来,“,”为单元格分隔符
            for(int i=0, leng=row.size(); i<leng; i++){
                b.push_back(string_to_float(row[i]));
            }
            a.push_back(b);
            b.clear();
        }
        in.close();
        return ;
    }
     
    inline void file_to_string(vector<string> &record, const string& line, char delimiter)
    {
        int linepos=0;
        char c;
        int linemax=line.length();
        string curstring;
        record.clear();
        while(linepos<linemax)
        {
            c = line[linepos];
            if(isdigit(c)||c=='.'){
                curstring+=c;
            }
            else if(c==delimiter&&curstring.size()){
                record.push_back(curstring);
                curstring="";
            }
            ++linepos;
        }
        if(curstring.size())
            record.push_back(curstring);
        return;
    }
     
    inline float string_to_float(string str){
        int i=0,len=str.length();
        float sum=0;
        while(i<len){
            if(str[i]=='.') break;
            sum=sum*10+str[i]-'0';
            ++i;
        }
        ++i;
        float t=1,d=1;
        while(i<len){
            d*=0.1;
            t=str[i]-'0';
            sum+=t*d;
            ++i;
        }
        return sum;
    }
    
    int main(){
        read();
        printf("total numbers of people: %d
    ",a.size());
        cout<<"top 5dims of person 1:"<<endl;
        for(int i=0;i<=4;i++)
            cout<<a[0][i]<<" ";
        return 0;
    }

     

  • 相关阅读:
    JavaScript脚本学习
    PE文件结构 (转贴)
    Squid 代理服务器 编译源码 伪造HTTP_X_FORWARDED_FOR 请求头
    设置win2003远程桌面允许2个以上会话
    2003远程桌面声音问题
    AS3正则表达式
    Visual Studio技巧之打造拥有自己标识的代码模板
    如何重建sql数据库索引
    多线程系列(转)
    时间差
  • 原文地址:https://www.cnblogs.com/exciting/p/11015115.html
Copyright © 2020-2023  润新知