如何在parfor循环中正确“切片” Matlab中的4D矩阵?

时间:2019-04-04 21:58:41

标签: matlab parfor

我试图使我的代码的一部分在MatLab中更快地运行,我想使用parfor。尝试执行此操作时,遇到有关我的变量D_all之一的以下错误。

“由于使用D_all的方式,PARFOR循环无法运行。”

这是我的代码示例。

M = 161;
N = 24;
P = 161;

parfor n=1:M*N*P
   [j,i,k] = ind2sub([N,M,P],n);

   r0 = Rw(n,1:3);
   R0 = repmat(r0,M*N*P,1);

   delta = sqrt(dXnd(i)^2 + dZnd(k)^2);

   d = R_prime - R0;

   inS = Rw_prime(find(sqrt(sum(d.^2,2))<0.8*delta),:);

   if isempty(inS)
            D_all(j,i,k,tj) = D_all(j,i,k,tj-1);
   else
            y0 = r0(2);

            inC = inS(find(inS(:,2)==y0),:);

            dw = sqrt(sum(d(find(sqrt(sum(d.^2,2))<0.8*delta & d(:,2)==0),:).^2,2));

            V_avg = sum(dw.^(-1).*inC(:,4))/sum(dw.^(-1));

            D_all(j,i,k,tj) = V_avg;
   end
end

我对并行计算不是很熟悉,并且我在线查看了这些指南,但并不真正了解如何将它们应用于我的情况。我想我需要“切片” D_all,但我不知道该怎么做。

编辑:我想我知道主要的问题是使用D_all时我有tjtj-1

编辑2 :我上面没有显示,可能会有所帮助,但是我定义了D_all(:,:,:,1) = V_1;,其中V_1对应于上一个时间步长。我尝试为每个步骤制作多个变量V_2V_3等,并将D_all(j,i,k,tj-1)替换为V_1(j,i,k)。这仍然导致我在D_all中看到的相同错误。

“ D_all的有效索引仅限于PARFOR循环”

0 个答案:

没有答案