
parfor loop including cell array
10 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Omid Sharifi Sedeh
le 7 Mai 2022
Commenté : Omid Sharifi Sedeh
le 7 Mai 2022
In a section of my code, I intend to do parallel computing for cells: This section is as followed
SpaceNeighbInfo= cell(length(StatesMat),4);
parfor ii=1:length(StatesMat)
[NeigbStates,NeigbStatesIdx,MLNeigb,MRNeigb]=NeigborStates(NJ,StatesMat,StatesMat(ii,:));% a function that has 4 matrix outputs
SpaceNeighbInfo{ii,1}=NeigbStates;
SpaceNeighbInfo{ii,2}=NeigbStatesIdx;
SpaceNeighbInfo{ii,3}=MLNeigb;
SpaceNeighbInfo{ii,4}=MRNeigb;
end
I recieve the following error:
The variable SpaceNeighbInfo in a parfor cannot be
classified.
See Parallel for Loops in MATLAB, "Solve Variable
Classification Issues in parfor-Loops".
But If I commentize the following lines the code can be compiled.
SpaceNeighbInfo{ii,2}=NeigbStatesIdx;
SpaceNeighbInfo{ii,3}=MLNeigb;
SpaceNeighbInfo{ii,4}=MRNeigb;
I am confused, would anyone help me with this?
I thank you very much in advance.
Best regards,
Omid
0 commentaires
Réponse acceptée
Matt J
le 7 Mai 2022
Modifié(e) : Matt J
le 7 Mai 2022
The way to work around this is to write the loop as,
parfor ii=1:length(StatesMat)
[SpaceNeighbInfo{ii,:}]=NeigborStates(NJ,StatesMat,StatesMat(ii,:));% a function that has 4 matrix outputs
end
The reason for the problem is that you are trying to make SpaceNighbInfo a slived variable, but the Fixed-Index Listing restriction on sliced variables is violated. From the documentation:

3 commentaires
Matt J
le 7 Mai 2022
That would indeed fix it, but it's terribly unnecessary, as the following simplified example should demonstrate,
SpaceNeighbInfo=cell(6,4);
parfor ii=1:size(SpaceNeighbInfo,1)
[SpaceNeighbInfo{ii,:}]=NeighborStates(ii) % a function that has 4 matrix outputs
end
SpaceNeighbInfo,
SpaceNeighbInfo =
6×4 cell array
{[1]} {[11]} {[21]} {[31]}
{[2]} {[12]} {[22]} {[32]}
{[3]} {[13]} {[23]} {[33]}
{[4]} {[14]} {[24]} {[34]}
{[5]} {[15]} {[25]} {[35]}
{[6]} {[16]} {[26]} {[36]}
function [varargout]=NeighborStates(ii)
varargout={ii,ii+10,ii+20,ii+30};
end
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Matrix Indexing dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!