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

时间:2012-04-13 04:56:31

标签: matlab parallel-processing

目前我有一个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的Example: Using a Custom Reduction Function,我可以看到存储给定的迭代变量是可能的(不必存储每一次迭代)但我并不完全理解它们的方法。我对它们的函数如何产生2个独立的输出变量(貌似)感到困惑,而函数只定义了一个输出变量。

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

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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