目前我有一个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个独立的输出变量(貌似)感到困惑,而函数只定义了一个输出变量。
我确信这是一个非常常见的问题,但到目前为止,我的搜索都没有产生任何有效的结果。
非常感谢任何帮助。
答案 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