我有大小为6GB的csv文件,我尝试使用Matlab上的导入功能加载它们,但由于内存问题而失败了。有没有办法减少文件的大小?
我认为没有。列导致问题。我有2330列的133076行。我有另一个文件是相同的没有。行但只有12行,Matlab可以处理。但是,一旦列增加,文件就变得非常大。
Ulimately,如果我可以明确地读取数据列,以便我可以得到132976的2329列向量,那就太棒了。
我正在使用Matlab 2014a
答案 0 :(得分:1)
默认情况下,数字数据由Matlab以双精度格式存储,每个数字占用8个字节。因此,大小为133076 x 2329的数据在内存中占用2.3 GiB。你有那么多的免费记忆吗?如果没有,减小文件大小将无济于事。
如果问题不是数据本身不适合内存,而是真正关于读取这么大的csv文件的过程,那么可能使用syntax
M = csvread(filename,R1,C1,[R1 C1 R2 C2])
可能会有所帮助,它允许您一次只读取部分数据。以块的形式读取数据并将它们组装在一个(预分配的!)数组中。
如果没有足够的内存,另一种可能性是在存储之前读取chunkwise,然后将每个块转换为single precision。这可以将内存消耗减少两倍。
最后,如果您不是一次性处理数据,但是可以实现您的算法,使其一次只使用几行或几列,那么相同的语法可以帮助您避免所有内存中的数据同时存在。