返回信息流有几个文件,都是数据文件,每一行各数据之间用逗号分隔,类似:
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++
这类的,不知道大家是否用过?
以及目前这种情况,有没有必要用这些库呢?
这是一条镜像帖。来源:北邮人论坛 / cpp / #97642同步于 2018/5/29
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【已解决】如何高效的使用C++读取几万行的数据文件,并处理输出
arence
2018/5/29镜像同步34 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
一行大概40字节 按十万行算也就4兆不到 全读到内存再处理就可以
Q1:
直接用标准库,性能不会差
Q2:
标准库没有矩阵,可以用用其他库
具体用不用其他库或者库的选择就要看你需要怎么处理这些数据了
谢谢解答。
现在不是内存的问题。
我现在用很傻叉的方法 一行一行读文件,存到数组里,再挨个遍历数据,一个一个处理。
最后写入到新文件,
比较慢。大概要十几秒。
所以不知道是不是有其他的库,直接以矩阵的方法,批量处理N行N列的数据,性能会不会有提高?
【 在 specops 的大作中提到: 】
: 一行大概40字节 按十万行算也就4兆不到 全读到内存再处理就可以
: Q1:
: 直接用标准库,性能不会差
: ...................
加一个读取缓冲区试试,别一行一行读取啊
【 在 arence (冲冲糕~) 的大作中提到: 】
: 谢谢解答。
: 现在不是内存的问题。
: ...................
【 在 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底层怎么实现的?
你主要做什么操作,每行元素间的加减乘除?
这个量的数据用循环也不会很慢,是不是编译器优化没开?
用多线程/SIMD/GPU都可以提升性能,但代价是程序的编写和维护难度的增加。简单的方法可以用OpenMP/手写多线程,我觉得优化到这一步已经足够了。再往后可以用Intel MKL,cuda(如果你有NVIDIA的GPU,没有就用AMP)
【 在 arence (冲冲糕~) 的大作中提到: 】
: 谢谢解答。
: 现在不是内存的问题。
: ...................