Matlab中“内存不足”错误的解决方案

shi*_* ma 2 matlab out-of-memory

我有一个很大的文本文件大小(大约11GB),需要在matlab中加载。但是当我使用“文本读取”功能时,会出现“内存不足”错误。并且无法减小文件大小。当我键入内存时,请告诉我。

memory
Maximum possible array:     24000 MB (2.517e+10 bytes) *
Memory available for all arrays:     24000 MB (2.517e+10 bytes) *
Memory used by MATLAB:      1113 MB (1.167e+09 bytes)
Physical Memory (RAM):     16065 MB (1.684e+10 bytes)

*  Limited by System Memory (physical + swap file) available.
Run Code Online (Sandbox Code Playgroud)

有谁能解决这个问题?

Edr*_*ric 5

@Anthony提出了一种逐行读取文件的方法,这非常好,但是最新版本的(> = R2014b)MATLAB具有datastore功能,该功能旨在处理大数据块。

datastore根据文本文件的格式,有几种可用的类型。在最简单的情况下(例如CSV文件),自动检测效果很好,您可以简单地说

ds = datastore('myCsvFile.csv');
while hasdata(ds)
    chunkOfData = read(ds);
    ... compute with chunkOfData ...
end
Run Code Online (Sandbox Code Playgroud)

在更新的(> = R2016b)版本的MATLAB中,您可以更进一步,并将其包装datastoretall数组中。tall数组使您可以处理太大而无法一次全部放入内存的数据。(在幕后,tall数组以块的形式执行计算,并且仅当您通过调用来提供结果时才为您提供结果gather)。例如:

tt = tall(datastore('myCsvFile.csv'));
data = tt.SomeVariable;
result = gather(mean(data)); % Trigger tall array evaluation
Run Code Online (Sandbox Code Playgroud)