1

目前我有一个 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 个单独的输出变量(似乎)感到困惑,而该函数只定义了一个输出变量。

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

任何帮助将非常感激。

4

1 回答 1

3

您链接到的示例不是您想要的。但是,可以只存储“好”的结果。这是一个简单的例子:

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
于 2012-04-13T11:58:52.167 回答