BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #97642同步于 2018/5/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【已解决】如何高效的使用C++读取几万行的数据文件,并处理输出

arence
2018/5/29镜像同步34 回复
有几个文件,都是数据文件,每一行各数据之间用逗号分隔,类似: 2018,05,02,15,25,40,015, -0.051923, -0.714929, 1.085134 2018,05,02,15,25,40,025, -0.054428, -0.717397, 1.088589 2018,05,02,15,25,40,035, -0.051607, -0.714290, 1.085775 2018,05,02,15,25,40,045, -0.051599, -0.715596, 1.082792 2018,05,02,15,25,40,055, -0.054463, -0.714196, 1.082500 这样的文件有好几个,每个文件有几万行 要把这几个文件全部读出来,然后分析里面的数据,按照一定规则合并成一个文件 目前有MATLAB的代码 MATLAB是按照将文件读入成矩阵,进行矩阵加减、遍历、查询某一列的最小值索引等 c++如何高效的实现上述功能? 目前用的QT框架。 c++读取文件是不是不能直接读成矩阵? 只能一行一行遍历,然后一个一个往里存?? 补充: 现在用了最傻叉的单线程,循环读取的方式。 先从文件中按行读取数据,存到内存中。 再做一些操作: 操作主要是:每行元素间加减,以及找到某一列的最小值所在的列数 反正要循环好几次。 还有一些嵌套循环。 大概要卡个十几秒才能出得来。 各位大神提的意见都是: 1、多线程 2、全部load到内存中,不要按行读取 但是总体思想 最后还是得以循环的方式遍历读到的数据,一个一个作处理是吧? 有没有什么靠谱的批量处理数据的库?类似MATLAB的矩阵处理。 看到网上有: Eigen矩阵库 还有IT++ 这类的,不知道大家是否用过? 以及目前这种情况,有没有必要用这些库呢?
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
specops机器人#1 · 2018/5/29
一行大概40字节 按十万行算也就4兆不到 全读到内存再处理就可以 Q1: 直接用标准库,性能不会差 Q2: 标准库没有矩阵,可以用用其他库 具体用不用其他库或者库的选择就要看你需要怎么处理这些数据了
byrssss机器人#2 · 2018/5/29
数据像是结构化数据,若是我自己写代码,先建立一个结构体,每个成员对应一个特征数据,然后每行数据对应一个结构体实例,所有行按照vector存储。
arence机器人#3 · 2018/5/29
谢谢解答。 现在不是内存的问题。 我现在用很傻叉的方法 一行一行读文件,存到数组里,再挨个遍历数据,一个一个处理。 最后写入到新文件, 比较慢。大概要十几秒。 所以不知道是不是有其他的库,直接以矩阵的方法,批量处理N行N列的数据,性能会不会有提高? 【 在 specops 的大作中提到: 】 : 一行大概40字节 按十万行算也就4兆不到 全读到内存再处理就可以 : Q1: : 直接用标准库,性能不会差 : ...................
intmain机器人#4 · 2018/5/29
加一个读取缓冲区试试,别一行一行读取啊 【 在 arence (冲冲糕~) 的大作中提到: 】 : 谢谢解答。 : 现在不是内存的问题。 : ...................
dxy1机器人#5 · 2018/5/29
【 在 arence 的大作中提到: 】 : 有几个文件,都是数据文件,每一行各数据之间用逗号分隔,类似: : 2018,05,02,15,25,40,015, -0.051923, -0.714929, 1.085134 : 2018,05,02,15,25,40,025, -0.054428, -0.717397, 1.088589 : ................... 要不看看matlab矩阵运算怎么搞的?或许python底层怎么实现的?
specops机器人#6 · 2018/5/29
你主要做什么操作,每行元素间的加减乘除? 这个量的数据用循环也不会很慢,是不是编译器优化没开? 用多线程/SIMD/GPU都可以提升性能,但代价是程序的编写和维护难度的增加。简单的方法可以用OpenMP/手写多线程,我觉得优化到这一步已经足够了。再往后可以用Intel MKL,cuda(如果你有NVIDIA的GPU,没有就用AMP) 【 在 arence (冲冲糕~) 的大作中提到: 】 : 谢谢解答。 : 现在不是内存的问题。 : ...................
chenxiansf机器人#7 · 2018/5/29
打开文件可以指定偏移的,多线程分块去读
Nroskill机器人#8 · 2018/5/29
几万行不大,全load到内存里再处理,一行行读累死
ekac8w机器人#9 · 2018/5/29
这不是csv吗,网上应该一把吧的代码吧