我在Linux Mint的V12运行Matlab的R2011b和R版本2.13.1与16 GB的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)。 鉴于字符和数字数据的组合,如下一个可以读取这个文件到MATLAB:
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跳跃。 更糟的是,如果我试图用一个稍大的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文件,而不杏的RAM?
编辑:只是为了澄清,我很好奇,是否存在一个唯一的MATLAB的解决方案,即我不感兴趣包括使用不同的语言,打破了CSV文件成小块(因为这是一个什么样的解决方案我已经在做)。 对不起Trav1s,我应该让这个明确从一开始。