我在具有 16 GB RAM 的 Linux Mint v12 上运行 Matlab R2011b 和 R 版本 2.13.1。
我有一个 csv 文件。前 5 行(和标题)是:
#RIC,Date[G],Time[G],GMT Offset,Type,Price,Volume
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.68,1008
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.68,1008
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.66,300
DAEG.OQ,07-JUL-2011,15:10:03.424,-4,Trade,1.65,1000
DAEG.OQ,07-JUL-2011,15:10:03.464,-4,Trade,1.65,3180
该文件很大(大约 900MB)。给定字符和数字数据的组合,可以将这个文件读入 matlab,如下所示:
fid1 = fopen('/home/MyUserName/Temp/X.csv');
D = textscan(fid1, '%s%s%s%f%s%f%f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid1);
虽然文件是 900MB,但在运行上述代码时,系统监视器显示我的 RAM 使用量从大约 2GB 跃升至 10GB。更糟糕的是,如果我使用稍大的 csv 文件(约 1.2 GB)尝试相同的过程,我的 RAM 最大为 16 GB,而 Matlab 永远无法完成数据的读取(它只是停留在“忙碌”模式)。
如果我想将同一个文件读入 R,我可能会使用:
D <- read.csv("/home/MyUserName/Temp/X.csv", stringsAsFactors=FALSE)
这比 Matlab 需要更长的时间,但系统监视器显示我的 RAM 使用量仅从 2GB 跳到 3.3GB(考虑到原始文件大小更合理)。
我的问题有两个部分:
1)为什么textscan
在这种情况下会占用大量内存?
2)我可以使用另一种方法将这种类型的 1.2GB csv 文件放入我系统上的 Matlab 中,而不会耗尽 RAM?
编辑:澄清一下,我很好奇是否存在仅 matlab 的解决方案,即我对涉及使用不同语言将 csv 文件分解成更小的块的解决方案不感兴趣(因为这就是我已经在做)。抱歉 Trav1s,我应该从一开始就说清楚。