我在Linux Mint v12上运行Matlab R2011b和R版本2.13.1,并使用16 GB的RAM。Matlab中的textscan与R中的类似方法相比使用了过多的RAM
我有一个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)。
fid1 = fopen('/home/MyUserName/Temp/X.csv');
D = textscan(fid1, '%s%s%s%f%s%f%f', 'Delimiter', ',', 'HeaderLines', 1);
fclose(fid1);
虽然该文件是900MB,运行上面的代码时,系统监视器显示我的内存使用跳跃约2GB到10GB:鉴于字符和数字数据的组合,如下一个可以读取这个文件到MATLAB 。更糟糕的是,如果我尝试使用略大的csv文件(大约1.2 GB)执行同样的过程,我的RAM最大值为16GB,而Matlab从未设法完成数据读取(它只停留在“繁忙”模式)。
如果我想读取相同的文件到R,我可能会使用:
D <- read.csv("/home/MyUserName/Temp/X.csv", stringsAsFactors=FALSE)
这需要一点比Matlab的长,但系统监视器显示我的内存使用率只有从2GB跳转到3.3GB(多给定原始文件大小更合理)。
我的问题有两个部分:
1)为什么是这样textscan
内存在这种情况下猪?
2)是否有另一种方法可以用来在我的系统上将Matlab的这种类型的1.2GB csv文件取出而不会使内存溢出?
编辑:只是为了澄清,我很好奇,是否存在一个唯一的MATLAB的解决方案,即我没有兴趣在涉及使用不同语言的CSV文件分解成更小的解决方案大块(因为这是我已经做的)。对不起Trav1s,我应该从一开始就明确这一点。
谢谢安德鲁,这个问题看起来是一个很好的答案,但直到明天我才会有机会详细阅读(我在工作中)。对不起,延迟。 –
安德鲁,好回答+1,谢谢。 –