为什么赢了';matlab不能并行运行我的简单嵌套for循环吗?

为什么赢了';matlab不能并行运行我的简单嵌套for循环吗?,matlab,parallel-processing,nested-loops,Matlab,Parallel Processing,Nested Loops,不幸的是,我不得不运行一个简单但庞大的3次嵌套for循环。这些循环填充了一个三维矩阵,表示在三维空间坐标中函数的强度。(有必要填充整个矩阵,因为我需要它来绘制3d强度云图…) 我想并行运行,因为我的笔记本电脑需要数周才能按顺序运行: % Initialize vars c0values = 400:1:600; n0values = 1:1:10000; phivalues = 0:0.1:2*pi; mtxHeight = zeros(numel(c0values),numel(n0

不幸的是,我不得不运行一个简单但庞大的3次嵌套for循环。这些循环填充了一个三维矩阵,表示在三维空间坐标中函数的强度。(有必要填充整个矩阵,因为我需要它来绘制3d强度云图…)

我想并行运行,因为我的笔记本电脑需要数周才能按顺序运行:

 % Initialize vars
 c0values = 400:1:600;
 n0values = 1:1:10000;
 phivalues = 0:0.1:2*pi;
 mtxHeight = zeros(numel(c0values),numel(n0values),numel(phivalues));
 % Run over c0
 parfor c0ctr=1:numel(c0values)
     % Run over n0
     for n0ctr=1:numel(n0values)
         % Run over phi
         for phictr=1:numel(phivalues)
             % Sum over ell
             dHeight = 0;
             for ell=1:10
                  dHeight = dHeight + fnToMaximize(mtxObs(ell,:), ...
                      c0values(c0ctr), ...
                      n0values(n0ctr), ...
                      phivalues(phictr));
             end     
             mtxHeight(c0ctr,n0ctr,phictr) = dHeight;
         end
     end
 end
出于某种原因,Matlab抱怨不能对
mtxHeight
进行分类,并拒绝以并行的形式运行代码


我在做什么是不允许的?

我认为MATLAB不能用parfor处理3个嵌套循环。我建议您在内部for循环之外更新
mtxHeight

大概是这样的:

 parfor c0ctr=1:numel(c0values)
     % Run over n0
     for n0ctr=1:numel(n0values)
         % Run over phi
         dHeight = zeros(1,numel(phivalues));
         for phictr=1:numel(phivalues)
             % Sum over ell
             for ell=1:10
                  dHeight(phictr) = dHeight(phictr) + fnToMaximize(mtxObs(ell,:), ...
                      c0values(c0ctr), ...
                      n0values(n0ctr), ...
                      phivalues(phictr));
             end     
        end
       mtxHeight(c0ctr,n0ctr,:) = dHeight;      
     end
 end

并行化不是一项容易的任务。特别是对于一台机器。