2014-08-27 2 views
2

병렬 도구의 설명서를 따르기 위해 최선을 다했지만 중첩 된 루프에서 인덱싱 된 배열을 다시 사용하는 문제는 피할 수 없었습니다. 문제 나, 인덱스는 또한 규칙에 따라 상기 중첩 루프 밖에서 배열을 사용하지 않는 가변 노드 parfor for matlab. 슬라이스 된 변수 및 중첩 된 루프

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

'노드'를 미리 할당 했습니까? 그게 문제를 일으킬 수 있습니다. – Trogdor

답변

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 

가 가진 모든 인덱스 포함 행렬 직장에서 슬라이스를 취득하고 그것을 반환한다.