MATLAB: Struct variable save in parfor loop

forloopparforstructvariable

I made simple code to test for saving struct variable in parfor loop.
parfor k=1:3
my_field = sprintf('v%d', k);
variable.(my_field) = k*2;
end
But, i did not get the results I wanted, and there was only a variable with an empty value in the workspace.
If I use for instead of parfor, I get the result I want perfectly. However, the function(not the simple like above code) actually used takes a long time, so I want to use parfor.
How do I save a struct variable such as variable.v1, variable.v2 in a struct variable using parfor?

Best Answer

I doubt that parfor wil work happily with dynamic fieldnames, because their order of definition is ambiguous (e.g .consider naming them using the mod of your loop counter: parfor cannot predict in which order the fields should be overwritten, which for a normal for loop is unambiguous).
The best solution is to avoid the awkward, ambiguous, anti-pattern dynamic fieldnames, and just use simpler indexing with a non-scalar structure:
N = 3;
S = struct('val',cell(1,N));
parfor k = 1:N
S(k).val = k*2;
end
Unlike your "perfect" code, this really does keep all of the data that you calculate:
>> S.val
ans =
2
ans =
4
ans =
6