
parfor loop including cell array
11 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Omid Sharifi Sedeh
el 7 de Mayo de 2022
Comentada: Omid Sharifi Sedeh
el 7 de Mayo de 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 comentarios
Respuesta aceptada
Matt J
el 7 de Mayo de 2022
Editada: Matt J
el 7 de Mayo de 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 comentarios
Matt J
el 7 de Mayo de 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
Más respuestas (0)
Ver también
Categorías
Más información sobre Matrix Indexing en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!