如何处理Matlab parfor循环中的未分类变量?
我有以下代码,我想让它并行。但不幸的是,当我使用parfor循环时,我得到了以下错误。代码如下:如何处理Matlab parfor循环中的未分类变量?,matlab,Matlab,我有以下代码,我想让它并行。但不幸的是,当我使用parfor循环时,我得到了以下错误。代码如下: parfor l1 = 1:length(lambda1_list) % over l1 for l2 = 1:length(lambda2_list) params.lambda1 = lambda1_list(l1); params.lambda2 = lambda2_list(l2); [t
parfor l1 = 1:length(lambda1_list) % over l1
for l2 = 1:length(lambda2_list)
params.lambda1 = lambda1_list(l1);
params.lambda2 = lambda2_list(l2);
[totBeta,theta,omega,rho,nu] = Learn_weights(dictionary(train_set,:), y(train_set,:), params);
end
end
下面是错误:
Error: The variable params in a parfor cannot be classified.
See Parallel for Loops in MATLAB, "Overview".
下面是params的样子
参数=
lambda1_list: [1 1.5000 2 2.5000 3 3.5000 4 4.5000 5 5.5000 6 6.5000 7 7.5000 8 8.5000 9 9.5000 10]
lambda2_list: [1 1.5000 2 2.5000 3 3.5000 4 4.5000 5 5.5000 6 6.5000 7 7.5000 8 8.5000 9 9.5000 10]
features: [50x2 double]
mcut: [1 1 1 1 1 1 1 1 1 1]
learnWeights: 0
beta_init: [50x10 double]
lambda1: 10
lambda2: 10
stopVal: 1.0000e-05
我想知道有人能帮我吗?我需要在程序中有参数,因为它有数千行代码,在不同的地方使用。
我正在寻找克服这个问题的诀窍。问题是,在parfor
循环的每次迭代中,您都在修改params
(相同的精确数据)。如果有两个并行作业,理论上它们都会试图更改相同的params
结构,这显然会导致问题
您可以选择在循环之前创建一个params
数组,然后使用数组中的每个元素
%// Duplicate params once for each time through the parfor loop
params_array = repmat(params, size(lambda1_list));
parfor l1 = 1:length(lambda1_list)
for l2 = 1:length(lambda2_list)
params_array(l1).lambda1 = lambda1_list(l1);
params_array(l1).lambda2 = lambda2_list(l2);
[totBeta,theta,omega,rho,nu] = Learn_weights(dictionary(train_set,:), y(train_set,:), params_array(l1));
end
end
另一个选项是在修改前创建params
的副本
parfor l1 = 1:length(lambda1_list)
%// Make a copy of the params that is local to this loop iteration
this_param = params;
for l2 = 1:length(lambda2_list)
%// Modify this copy
this_param.lambda1 = lambda1_list(l1);
this_param.lambda2 = lambda2_list(l2);
%// Pass this modified copy to Learn_weights
[totBeta,theta,omega,rho,nu] = Learn_weights(dictionary(train_set,:), y(train_set,:), this_param);
end
end