parfor loop including cell array

10 vues (au cours des 30 derniers jours)
Omid Sharifi Sedeh
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

Réponse acceptée

Matt J
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
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
Omid Sharifi Sedeh
Omid Sharifi Sedeh le 7 Mai 2022
Thank you very much. Indeed this time it worked nicely! The problem was with my Matlab!
After a restart, your command worked like a charm!
best regards,
Omid

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits


Version

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by