在 parfor 中存储结构时出现变量分类错误

Variable classification error while storing structure within parfor

我有一个运行 parfor 循环的函数。在循环中,我调用了另一个生成结构的函数。我需要存储所有的结构。

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

这给我一条错误消息:

The variable total_results in a parfor cannot be classified.

如何从所有模拟中存储结构 "struct_result"?它是一个嵌套结构。

这里的问题是您在循环期间分配给 total_results 的一部分,而不是在 parfor 循环之后的 "sliced" manner. It's probably simpler to collect up the names and values separately, and then use cell2struct 中,如下所示:

N = 10;
names = cell(1, N);
results = cell(1, N);
parfor i = 1:10
    name = sprintf('result_%i',i)
    names{i} = name;
    results{i} = struct('a', rand(i), 'b', rand(i));
end
total_results = cell2struct(results, names, 2);

EDIT 另一种切片输出的方法(如评论中所建议的)是使用

parfor i = 1:10
    total_results(i).result = struct('a', rand(i), 'b', rand(i));
end

在这种情况下,这是可行的,因为一级索引表达式是 "sliced" 表达式。