Matlab“Out of Memory”解决方案?

时间:2012-11-20 04:49:09

标签: matlab memory

fname = dir('*sir');
[tmp, head] = loadsir(fname(1).name);
dayH = zeros(length(fname),size(tmp,1),size(tmp,2));

% use temporary array to simplify 3d array creation
for i=1:1
  tmp = loadsir(fname(i).name);
  dayH(i,:,:) = tmp;
end

我上面有这个代码,但我得到的是:

Error using zeros
Out of memory
Error in dataAnalysis (line 4)
dayH = zeros(length(fname),size(tmp,1),size(tmp,2));

1 个答案:

答案 0 :(得分:2)

Matlab中的数组存储在连续的内存块中。您可能内存不足,因为您的计算机没有足够大的内存块来存储整个矩阵。

你需要:

  1. 减小矩阵的大小,或
  2. 使用允许将内存保存在不连续块中的变量类型。
  3. 如果您不打算填充整个矩阵,请尝试使用sparse matrix根据@Dennis Jaheruddin的建议缩小其大小

    如果您计划填充矩阵,请考虑将其拆分为单元格。

    zeroMat = zeros( size(tmp,1), size(tmp,2) );
    daysH = repmat( {zeroMat}, [length(fname), 1] );
    

    对于大小为size(tmp,1) x size(tmp2)的矩阵,每个单独的单元仍然需要足够的内存。除非这些数字很大,否则你应该没问题。