我尽力遵循并行工具箱的文档,但仍然无法避免重用在嵌套循环中编入索引的数组的问题。 问题在于变量节点
parfor i=1:nX
for j=1:nY
[ind,dist]=findInCircle(node(i,j,:), part,r);
UV=calcVelocity(part(ind,:), dist,node(i,j,:)) ;
%here matlab complains that node is not indexed properly
node(i,j,3)= UV(1);
node(i,j,4)= UV(2);
node(i,j,5)= UV(3);
end
end
我不使用嵌套循环之外的数组,索引也是根据规则。我是否错过了另一个 parfor 限制?
答案 0 :(得分:4)
根据documentation,你不能像你一样使用不同的索引:
在第一级括号或大括号中,对于给定变量的所有出现,索引列表相同。
可以采用简单的解决方法:
parfor i=1:nX
nodeSlice=node(i,:,:)
for j=1:nY
[ind,dist]=findInCircle(nodeSlice(j,:), part,r);
UV=calcVelocity(part(ind,:), dist,nodeSlice(j,:)) ;
%here matlab complains that node is not indexed properly
nodeSlice(j,3)= UV(1);
nodeSlice(j,4)= UV(2);
nodeSlice(j,5)= UV(3);
end
node(i,:,:)=nodeSlice;
end
从包含所有索引的矩阵中获取切片,使用它然后返回它。