数据读取中实例一

ANN_SIFT数据地址

文件内容格式

field field type description
d int the vector dimension
components float *d the vector components
void load_data(char* filename, float*& data, unsigned& num,unsigned& dim){// load data with sift10K pattern//以二进制形式打开文件std::ifstream in(filename, std::ios::binary);//判断是否打开if(!in.is_open()){std::cout<<"open file error"<<std::endl;exit(-1);}//读入4个字节in.read((char*)&dim,sizeof(unsigned));std::cout<<"data dimension: "<<dim<<std::endl;//输入位置指示器设置到文件末尾,偏移0in.seekg(0,std::ios::end);//返回输入位置指示器std::ios::pos_type ss = in.tellg();//直接长度size_t fsize = (size_t)ss;//转化为float的和dim维度的数量,这里unsigned是总字节数,每条数据长度为(dim+1)*4num = (unsigned)(fsize / (dim+1) / 4);data = new float[num * dim * sizeof(float)];//输入位置指示器设置到文件开始,偏移0in.seekg(0,std::ios::beg);for(size_t i = 0; i < num; i++){//当前位置偏移4 这里读出的数量是数据维度,本数据是维度相同,所有读入第一个即可in.seekg(4,std::ios::cur);//读取一个dim维度floatin.read((char*)(data+i*dim),dim*sizeof(float));}//关闭文件in.close();
}

改进一下

/*** @brief 加载特征全部数据*/
std::vector<std::vector<float>> load_data(const std::string &filename)
{ // load data with sift10K pattern//以二进制形式打开文件std::ifstream in(filename, std::ios::binary);//判断是否打开if (!in.is_open()){std::cout << "open file error" << std::endl;exit(-1);}//读入4个字节,得到数据维度unsigned dim;in.read((char *)&dim, 4);std::cout << "data dimension: " << dim << std::endl;//输入位置指示器设置到文件末尾,偏移0in.seekg(0, std::ios::end);//返回输入位置指示器std::ios::pos_type ss = in.tellg();//文件长度size_t fsize = (size_t)ss;//单条数据长度unsigned cell_size = dim * sizeof(float) + sizeof(int);//算出数据条数unsigned num = (unsigned)(fsize / cell_size);//返回结果集合std::vector<std::vector<float>> res;//预留内存空间,避免push_back频繁分配内存res.reserve(num);//输入位置指示器设置到文件开始,偏移0in.seekg(0, std::ios::beg);for (size_t i = 0; i < num; i++){//当前位置偏移4 这里读出的数量是数据维度,本数据是维度相同,所有读入第一个即可in.seekg(4, std::ios::cur);std::vector<float> tmp_data(dim);//读取一个dim维度floatin.read((char *)(tmp_data.data()), dim * sizeof(float));res.push_back(std::move(tmp_data));}//关闭文件in.close();return std::move(res);
}

读取正确结果数据文件

/*** @brief 加载测试集groudtruth*/
std::vector<std::vector<unsigned>> load_groundtruth(const std::string &filename)
{//以二进制形式打开文件std::ifstream inputGT(filename, std::ios::binary);//判断是否打开if (!inputGT.is_open()){std::cout << "open file error" << std::endl;exit(-1);}//读入4个字节unsigned topk;inputGT.read((char *)&topk, sizeof(unsigned));std::cout << "data topk: " << topk << std::endl;//输入位置指示器设置到文件末尾,偏移0inputGT.seekg(0, std::ios::end);//返回输入位置指示器std::ios::pos_type ss = inputGT.tellg();//文件长度size_t fsize = (size_t)ss;//获取单个数据长度unsigned cell_size = (topk + 1) / sizeof(unsigned);//计算数据个数unsigned num = (unsigned)(fsize / cell_size);//结果集合std::vector<std::vector<unsigned>> massQA;//预留内存空间,避免push_back频繁分配内存massQA.reserve(num);//输入位置指示器设置到文件开始,偏移0inputGT.seekg(0, std::ios::beg);for (unsigned i = 0; i < num; i++){int t;inputGT.read((char *)&t, 4);std::vector<unsigned> buffer(t);inputGT.read((char *)buffer.data(), t * sizeof(unsigned));massQA.push_back(buffer);}//关闭文件inputGT.close();return std::move(massQA);
}

std::ifstream实例相关推荐

  1. pytorch 对特征进行mean_Pytorch的mean和std调查实例

    如下所示: # coding: utf-8 from __future__ import print_function import copy import click import cv2 impo ...

  2. C++文件流std::ifstream的使用

    由于在科研过程中,经常需要提取文件中的数据.这时候使用文件流ifstream去读取数据就比Excel处理数据快多了! 在ifstream中有两个内置的API均可读取文件流中的数据:get()和getl ...

  3. std::ofstream实例

    数据存储中实例一 文件内容格式 field field type description d int the vector dimension components float *d the vect ...

  4. C++ 容器的综合应用的一个简单实例——文本查询程序

    [0. 需求] 最近在粗略学习<C++ Primer 4th>的容器内容,关联容器的章节末尾有个很不错的实例. 通过实现一个简单的文本查询程序,希望能够对C++的容器学习有更深的理解. 由 ...

  5. opencv图像识别训练实例

    我一度以为图像训练会很难,觉得很高深,直到我亲自做了一个图像的训练才认识到如果仅仅是单纯地学习和使用,真的很简单. 本文按照如下顺序来进行详细解释如何进行图像识别训练过程: 制作图像 图像数据 图像训 ...

  6. fstream、ifstream、ofstream

    文件流 ofstream //文件写操作,内存写入存储设备(文件) 输出流 通常我们所说的对一个文件进行写操作,就是把内存里的内容,也就是缓冲区的内容写到硬盘,可以将标准输出设备理解为显示器ifstr ...

  7. TensorFlow Lite 开发手册(5)——TensorFlow Lite模型使用实例(分类模型)

    TensorFlow Lite 开发手册(5)--TensorFlow Lite模型使用实例(分类模型) (一)新建CLion工程 (二)编写Cmakelist (三)编写main.cpp (四)下载 ...

  8. 第一篇:C/C++语法与std数据结构

    系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 编程基础及进阶 一.C/C++的介绍 1.从面向过程,到面向对象 面 ...

  9. c++输入文件流ifstream用法详解

    目录 文章目录 输入流的继承关系: 成员函数 Public member functions 1, (constructor) 2,ifstream::open 3,ifstream:: is_ope ...

最新文章

  1. DL之perceptron:利用perceptron感知机对股票实现预测
  2. QT的QDirIterator类的使用
  3. 一个想法:成立草根技术联盟对开发人员进行技术定级解决企业员工招聘难问题!...
  4. ftp网页版服务器地址,免费ftp服务器地址汇总
  5. Intel 64/x86_64/IA-32/x86处理器 - SIMD指令集 - MMX技术(4) - 比较指令
  6. 为什么民营银行,农村商业银行存款,定期存款利率比五大行还高?
  7. 重新组织和重新生成索引sp_RefreshIndex
  8. Android Intent 机制解析 - Intent 是什么?作用是什么?
  9. java基于ssm的个人信息保险箱系统
  10. 蚁群算法(实验分析)
  11. win10 命令行进入指定目录方法
  12. matlab 双点光源干涉的模拟,基于MATLAB的双点光源干涉现象的模拟
  13. 条码应用与企业ERP无缝集成
  14. AlphaFold/run_alphafold.py代码阅读理解
  15. 其实,男人也需要被疼爱
  16. Profinet现场总线耦合器模拟量扩展IO
  17. 《炬丰科技-半导体工艺》清洗含有介电膜的半导体晶片的方法
  18. Synchro Arts团队获美国电影艺术与科学学院Academy奖
  19. 自然语言处理的应用,自然语言处理就业前景
  20. 用Java实现PPT转换成PDF的一种方式--openoffice的使用

热门文章

  1. Alfresco使用手册
  2. 果壳网(guokr.com)发布了
  3. Hadoop实战记录-目录
  4. 转载:提高脑力70法
  5. Linux下对文件权限的管理
  6. 知心王姐小饭桌 IM消息应用开发:一看看懂Protocol Buffer(协议篇)
  7. 小米5主板原理图_小米5手机拆机图解教程
  8. app式成语_abcc的成语c-abcc的成语c式词语大全app安卓版v12.12.2下载-SLY软件园
  9. 绷紧数据安全这根弦 数据安全法 实施参考发布
  10. c语言字符串dna,DNA (C语言代码)