首页 > 解决方案 > 增加for循环matlab中的内存使用量

问题描述

我遇到了 for 循环的问题,其中内存使用量不断增加,直到没有剩余 RAM。for 循环进行了大约 10,000 次迭代,每次它应该读取目录中的索引文件,使用 fmincon 执行一些操作,然后将输出保存到另一个索引 csv 文件。每个文件小于 1MB,处理 20 个文件后,内存使用量从 1GB 变为 2GB。(最初,我认为问题出在使用“parfor”,但我意识到即使在正常的 for 循环中,我也会看到此内存“泄漏”;单击此处查看此问题)。代码如下,其中“my_func”是我要最小化的函数。我可以根据要求提供这个函数,但由于它是“封装的”,我认为这无关紧要。

list = dir('~/Documents/matlab_files/*.csv');
L    = length(list);
for i = 1:L
      data = readtable(strcat('~/Documents/matlab_files/',list(i).name));
      all_para = [0.03,0.3,0.001,0.001];
      try
          [x,fval] = fmincon(@(all_para)my_func(all_para,data),...
              all_para,[],[],[],[],...
              [-5,-5,0.01,0.01],...
              [5,5,5,5]);
          csvwrite(strcat('~/Documents/matlab_files/output/',list(i).name,'.csv'),x);
      catch ME
              %fprintf('without success: %s\n', ME.message);
              %continue;  % Jump to next iteration of: for i
      end
  end

同样,我最初想使用 parfor,但我意识到内存使用量的增加也发生在常规 for 循环中。

我正在使用 2018b

标签: matlabfor-loop

解决方案


推荐阅读