parfor in matlab. loop variabile e annidato a fette

Ho fatto del mio meglio per seguire la documentazione della toolbox parallela, ma ancora non ho potuto evitare il problema del riutilizzo dell’array che è stato indicizzato in un ciclo annidato. Il problema è con il nodo variabile

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 

Non uso la matrice al di fuori del ciclo annidato, l’indicizzazione è anche secondo la regola. Ho perso un’altra restrizione?

Secondo la documentazione non puoi usare indici diversi come hai fatto tu:

All’interno della parentesi o delle parentesi di primo livello, l’ elenco degli indici è lo stesso per tutte le occorrenze di una determinata variabile.

Una soluzione semplice è ansible:

 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 

Ottieni una fetta dalla matrice che contiene tutti gli indici, lavoraci e poi restituiscilo.