parfor-loop的主体不能包含return语句.
我觉得有时可能很方便,例如:
if matlabpool('size') == 0 % checking to see if my pool is already open
matlabpool(2)
end
parameters = random_parameters(1000)
parfor i=1:1000
result = do_stuff(parameters(i))
if result < threshold
return parameters
end
end
有没有通常的方式来模仿parfor的回报?
我在Windows 7 SP1 x64 Ultimate上使用Matlab R2014a.
最佳答案 在这种情况下我使用try-catch块.一些例子:
rng('shuffle')
try parpool('local'); end % try block to avoid reinitiation of parpool
parameters = normrnd(0,1,1000,1);
threshold=0.95;
FoundParameter=NaN;
try
parfor iParam=1:1000
result = sin(parameters(iParam))
if result < threshold
error(num2str(parameters(iParam)))
end
end
catch err
FoundParameter=str2num(err.message);
end
if isnan(FoundParameter)
fprintf('\nGood parameter was not found\n')
else
fprintf('\nGood parameter is: %f\n',FoundParameter)
end
附:请不要使用i和j作为迭代变量.这是MatLab的不良做法