Parfor loops skipping an index
3 次查看(过去 30 天)
显示 更早的评论
When I run the piece of code below, the result shows that there is an index that is not executed...
temp=struct('myfield1',num2cell(ones(2,6)));
parfor i = 1:6
temp(2,i).myfield1 = i*4;
temp(2,i).myfield2 = i;
end
I have run this on a few computers and one of the index is always not executed (or at least seems to). For example, I could have temp(2,6).myfield1=1 and temp(2,6).myfield2=[] instead of temp(2,6).myfield1=24 and temp(2,6).myfield2=6.
Could it be because I did not define all the fields beforehand?
0 个评论
回答(1 个)
Edric Ellis
2015-1-6
Yes, defining all the fields of temp beforehand works around this problem, like so:
temp=struct('myfield1',num2cell(ones(2,6)), 'myfield2', []);
parfor i = 1:6
temp(2,i).myfield1 = i*4;
temp(2,i).myfield2 = i;
end
% Assertions:
assert(isequal(4:4:24, [temp(2, :).myfield1]));
assert(isequal(1:6, [temp(2, :).myfield2]));
2 个评论
Edric Ellis
2015-1-6
I'm afraid I know of no other workaround involving structures. Could you perhaps return cell arrays of data with which you can recreate the structure outside the PARFOR loop?
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!