MATLAB - 如何加载和处理一个大的TEXT文件(32GB)

时间:2014-06-03 18:34:35

标签: matlab file memory import bigdata

首先,对不起我的英语......

我想知道加载和处理大型TXT文件的更好方法(大约32GB,矩阵83.000.000x66)。我已经尝试过TEXTSCAN,IMPORT(内存不足),fgets,fget1等的实验。除了导入方法,所有方法都有效,但需要花费很多时间(超过1周)。

我的目标是使用这个数据库来执行我的采样过程,之后是一个用于学习行为的神经网络。

有人知道如何更快地导入此类数据吗?我正在考虑以其他格式(而不是TXT)进行数据库转储,例如SQL服务器,并尝试通过查询来处理访问数据库的数据。

其他疑问,在加载所有数据后,我可以保存.MAT格式并在我的实验中使用此格式处理吗?其他更好的主意?

提前致谢。

1 个答案:

答案 0 :(得分:0)

在你的工作空间/内存中保存这么大的矩阵(5,478,000,000个值)是不可能的(除非你有大量的ram)。所以文件格式(.mat或.csv)并不重要! 你绝对必须使用一个数据库(或者将文件分成较小的数据库并逐步计算(也需要很长时间)。

Personaly,我只有sqlite3的实验,并且与1.47mio x 23矩阵/ csv文件类似。 http://git.osuv.de/markus/sqlite-demo(请记住,我的csv2sqlite.m只是为了与GNU Octave一起运行[晚上19k秒......好吧,它也是糟糕的脚本:)]。 在将所有内容导入sqlite3数据库之后,我只能在8-12秒内访问我需要的数据(请查看leistung.m的注释标题)。

如果你的csv文件是直的,你可以简单地用sqlite3本身导入它 例如:

┌─[markus@x121e]─[/tmp]
└──╼ cat file.csv 
0.9736834199195674,0.7239387515366997,0.3382008456696883
0.6963824911102146,0.8328410999877027,0.5863203843393815
0.2291736458336333,0.1427739134201017,0.8062332551565472
┌─[markus@x121e]─[/tmp]
└──╼ sqlite3 csv.db
SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
sqlite> CREATE TABLE csvtest (col1 TEXT NOT NULL, col2 TEXT NOT NULL, col3 TEXT NOT NULL);
sqlite> .separator ","
sqlite> .import file.csv csvtest
sqlite> select * from csvtest;
0.9736834199195674,0.7239387515366997,0.3382008456696883
0.6963824911102146,0.8328410999877027,0.5863203843393815
0.2291736458336333,0.1427739134201017,0.8062332551565472
sqlite> select col1 from csvtest;
0.9736834199195674
0.6963824911102146
0.2291736458336333

所有这些都是用https://github.com/markuman/go-sqlite完成的(Matlab和Octave兼容!但我想除了我以外没人用过它!) 但是,我建议在git checkout -b 2 origin/2模式下运行的分支2(coop)中的版本2-beta(您将在ego模式下从sqlite3中获取最大字符串长度)。版本2也有一个html doku。 http://go-sqlite.osuv.de/doc/