Error storing structure within parfor

조회 수: 1 (최근 30일)
Mohd Shihabuddin Khan
Mohd Shihabuddin Khan 2019년 10월 8일
댓글: Mohd Shihabuddin Khan 2019년 10월 9일
I have a function which runs a parfor loop. Within the loop, I call another function which generates a structure as a result. I need to store all the structures.
function myFunction(arguments)
% do some preliminary calcultions
parfor i = 1:num_sim % number of simulations
name = sprintf('result_%i',i)
% do some calculations and generate a structure as a result called "struct_result"
total_results.(name) = struct_result
end
end
This gives me an error message:
The variable total_results in a parfor cannot be classified.
How can I store the structure "struct_result" from all the simulations? It is a nested structure.

채택된 답변

meghannmarie
meghannmarie 2019년 10월 9일
You could try storing it in a cell array and converting to structure after the parfor:
names = cell(num_sim,1);
results = cell(num_sim,1);
parfor i = 1:num_sim % number of simulations
names{i} = sprintf('result_%i',i);
results{i}= struct_result;
end
total_results = cell2struct(results, names, 1);
  댓글 수: 2
Walter Roberson
Walter Roberson 2019년 10월 9일
This is probably a good idea. You could also generate the field names after the parfor as they depend only on the indices.
parfor needs to be able to establish through static analysis where the output is to be written to, in order to be sure that different workers do not write to the same location. The inference is not advanced enough to extend to fieldnames calculated with sprintf.
Mohd Shihabuddin Khan
Mohd Shihabuddin Khan 2019년 10월 9일
I tried
total_results(i).result = struct_result
and this worked.
This seems a simpler solution as I don't have to convert back to a struct.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by