我有一个Matlab函数,我在其中使用parfor,它是这样的:
sbestposition=zeros(8,38);
sbestvalue=zeros(8,1);
matlabpool open 8
parfor i=1:8
[ sbestvalue(i) sbestposition(i,1:i+30)] = pso(lb, ub, s2, i+31, 30,1,2,2 );
end
matlabpool close
sbestposition
的大小取决于i
的值,(1,31)
时的i=1
和(1,38)
时的i=8
;我打算将它们的值保存在一个变量中。
该函数在[ sbestvalue(i) sbestposition(i,:)] = pso(lb, ub, s2, i+31, 30,1,2,2 );
时有效但是当我使用它时,由于尺寸不匹配错误,该函数将无法再次工作。
相反,这里它给出了一个错误
parfor中的变量sbestposition无法分类
我如何克服这个问题?
谢谢。
答案 0 :(得分:1)
为什么不使用单元格数组进行sbestposition
parfor i = 1:8
[sbestvalue(i), sbestposition{i}] = ...
end
答案 1 :(得分:1)
Matlab并不“知道”如何在如此复杂的模式中对变量进行切片。每次迭代最多使用整行,最少使用行。很明显,变量应该按行切片:
parfor i=1:8
p=zeros(1,38);
[sbestvalue(i),p(1:i+30)]=pso(lb, ub, s2, i+31, 30,1,2,2 );
sbestposition(i,:)=p;
end
在此代码中,工具箱可以将每行推送到一个工作人员,显然没有干扰。
答案 2 :(得分:0)
您正在更改 parloop 内的变量维度。