在Matlab中加载大型csv文件

时间:2015-07-31 01:02:34

标签: matlab csv

我有大小为6GB的csv文件,我尝试使用Matlab上的导入功能加载它们,但由于内存问题而失败了。有没有办法减少文件的大小?

我认为没有。列导致问题。我有2330列的133076行。我有另一个文件是相同的没有。行但只有12行,Matlab可以处理。但是,一旦列增加,文件就变得非常大。

Ulimately,如果我可以明确地读取数据列,以便我可以得到132976的2329列向量,那就太棒了。

我正在使用Matlab 2014a

1 个答案:

答案 0 :(得分:1)

默认情况下,数字数据由Matlab以双精度格式存储,每个数字占用8个字节。因此,大小为133076 x 2329的数据在内存中占用2.3 GiB。你有那么多的免费记忆吗?如果没有,减小文件大小将无济于事。

如果问题不是数据本身不适合内存,而是真正关于读取这么大的csv文件的过程,那么可能使用syntax

M = csvread(filename,R1,C1,[R1 C1 R2 C2])

可能会有所帮助,它允许您一次只读取部分数据。以块的形式读取数据并将它们组装在一个(预分配的!)数组中。

如果没有足够的内存,另一种可能性是在存储之前读取chunkwise,然后将每个块转换为single precision。这可以将内存消耗减少两倍。

最后,如果您不是一次性处理数据,但是可以实现您的算法,使其一次只使用几行或几列,那么相同的语法可以帮助您避免所有内存中的数据同时存在。