存储在参数循环中计算的结构变量 - MATLAB



目前我有一个parfor循环,在MATLAB中的一个结构上进行计算。虽然我的代码发布起来有点长,但可以使用以下示例进行模拟:

a.test = [1 2 3];
result = [];
parfor i = 1:3
  c = a;
  c.test(2) = round( rand() );
  if c.test(2) == 1
     %# Store c in result
  end
end
disp(result.test) %# Should show [1 1 3]

a(以及因此 c)是一个非常大的结构,因此存储每个迭代对我来说是不可行的(由于内存限制)。

理想情况下,我希望能够将 c 直接存储到我在 parfor 循环之前初始化的变量中。查看 MATLAB 的示例:使用自定义归约函数,我可以看到可以存储给定的迭代变量(不必存储每个迭代),但我并不完全理解他们的方法。我对他们的函数如何产生 2 个单独的输出变量(似乎)而该函数只定义一个输出变量感到困惑。

我确信这是一个非常普遍的问题,但到目前为止,我的搜索都没有产生任何有效的结果。

任何帮助将不胜感激。

你链接到的例子并不完全是你想要的。但是,可以只存储"良好"的结果。下面是一个简单的示例:

A=zeros(0,2); %# initialize A with no rows, two columns
parfor i=1:6
   tmp = rand(1); %# create some result
   if tmp > 0.5 %# store only part of the results
      A = [A;[tmp,i]]; %# store also the iteration number, in case it matters
   end
end
>> A
A =
    0.6497    2.0000
    0.5052    4.0000
    0.9993    5.0000

最新更新