在 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" 表达式。
我有一个运行 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" 表达式。