Matlab 的内存问题:更新 .mat 中的变量

Memory issue with Matlab: update variable in .mat

我正在 Matlab 中处理计算量很大的扩展代码。它需要使用优化技术和使用非常大的矩阵进行长时间计算。

我遇到以下问题:即使代码 运行 正确,在代码要求的迭代结束时,Matlab 也没有存储我拥有的最大元胞数组。我猜这是由于我的代码或我的计算机(可能不够强大)内存效率低下所致。但是,我遵循了 Matlab 文档中的所有一般建议,但它仍然无法正常工作。

使用 evalc,我设法为代码的每次迭代保存不同的变量,以便在循环结束时重新创建原始矩阵。但是,使用:

  1. evalc(strcat('var_', mat2str(i), '=varTmp'));
  2. evalc(strcat('save(var_', mat2str(i), '-append)'));
  3. 清除变量*

..以这种方式它正在工作,但它仍然很慢而且不是很 "clean and tidy"。

有没有办法以更好的方式做同样的事情(考虑到我必须对具有不同名称和维度的几个变量做同样的事情)或者更新 .mat 文件中的元胞数组添加一列(行或其他)而不加载它?

谢谢

使用 matfile,它允许您写入和读取 mat 文件的部分内容,而无需将其读入内存。一个小演示:

%initialize matfile
data=matfile('example.mat','writable',true)
n=10
%preallocate cell
data.list=cell(n,1)
for ix=1:n
    %do some stuff
    var=foo(n)
    %store the results
    data.list(3,1)={var}
end

data.list(3,1)={var}看起来有点奇怪,因为matfile在索引时有一些限制,但它的"meaning"是data.list{3}=var