2
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));
4

1 回答 1

2

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

你需要:

  1. 减小矩阵的大小,或
  2. 使用允许将内存保存在不连续块中的变量类型。

如果您不打算填充整个矩阵,请尝试sparse matrix按照@Dennis Jaheruddin 的建议使用 a 减小其大小

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

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

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

于 2012-11-20T14:20:23.437 回答