用matlab 将大量(700w个)的csv文件读入,现在预计时间是1400w 秒, 有没有方法提速
应该在读取文件的同时,根据数据类型直接转换成数值,而不是读完后再使用str2double进行转换。对于无法全部放入内存的csv文本数据集合,应该使用tabularTextDatastore函数进行读取。
■网友
看了一下 str2double的函数,发现它思路是这样的:先将所有的cell弄成一列,然后每个元素转换的时候都会 call 一遍自己。。。在把得到的array reshape 一下。难怪慢继续更新:matlab 论坛已经搞定请问有没有比str2double更快的字符串转数字的方法?0.04秒一个文件。差不多可以用了。
■网友
直接这么处理不知道你想做什么?也不知道你的电脑内存是否能够吃的消?如果一次处理也就罢了,需要多次活着部分的话建议还是把这些搞成一个数据库。之后筛选也好、修改也好、查询也好、分析也罢都会比较方便一些。
■网友
这个问题描述的不是特别清楚,你还是应该根据需求仔细设计一下数据结构。--比如700w个文件是转换成700w个cell再存储成700w个mat file;还是要把700w个文件都读出来,存到一个大文件里?如果是后者,感觉非常没有必要。。。如果必须要达到类似的效果的话,只能用数据库了。。。如果是前者,用python做会比较快一点,先把csv里的数据读成ndarray格式,再存储成mat file。重点是python多线程非常简单,而这种任务是IO expensive的,非常适合多线程处理,如果机器内存足够的话,开个几百线程没有问题。
■网友
python+pandas+mysql,学习成本远远低于你的预期
■网友
700w个文件,每个几百K,这个要么是处理tick级别数据,要么是处理1分钟级别数据了吧。其他还有什么数据,需要分这么多个文件来保存吗?我个人是用R语言的data.table包,fread的方法去读取。指定每个列的数据类型,用colclasses。一天2600多只股票的tick数据,读取+数据清洗,大概耗时4秒。对应到700w个文件,大概3w秒能搞定,比题主目前的1400w秒要好接受多了。不过我更好奇的是,如果是tick级别的数据,700w个,对应的差不多有2800个交易日,11.5年的数据量,这么些数据,从哪获得啊?数据质量如何啊?
■网友
1. 不认为这个量级的数据适合在使用matlab的时候全部读入内存。2. 集成到数据库里面,用数据库方法读会好一些。3. 用python值得一试,每个矩阵不大,但是量大一些,读成ndarray对象就可以了。当然这其实相当于把你的程序完全移植到python里面了。
■网友
你的具体问题是干啥的呢?你没有说出来!
大家都知道MATLAB很慢,优势就是有各种各样的现成的函数而已!
推荐你用python+pandas
【用matlab 将大量(700w个)的csv文件读入,现在预计时间是1400w 秒, 有没有方法提速】 据说是用C语言优化的,应该会比你用MATLAB快很多很多!
■网友
大内存 ssd 多线程 编程化
■网友
先用fread读入整个文件到一个string。想办法把数字部分从string中截取出来(若文件格式整齐应可行),然后使用sscanf。
推荐阅读
- 它浑身是毒,入侵我国却被大量种植,如今年产量高达55万吨
- 汽车市场|「数据报告」比亚迪外供底盘数量激增,大量车企同时配套比亚迪电池电机
- 趣头条|吸睛之作 梅赛德斯·奔驰X-Class推改装特别版 全车采用大量碳纤维
- 环球车讯网|奇瑞艾瑞泽5plus,颜值内饰均在线,网友:有大量众泰设计师加盟
- 8月初TI5期间。 V社的网络被谁黑了
- 怎样看待王思聪微博有大量粉丝,一举一动都受到社会的广泛关注
- 后视镜|福特新Ranger Wildtrak X海外上市 增大量套件
- 在网站上爬取大量纯文本信息,用啥语言比较好
- Matlab求解闭合曲线围成图形面积的方法
- 怎样用matlab画出一张好看的3D流场图
