3个嵌套for循环的matlab矢量化

时间:2017-12-05 20:43:51

标签: matlab vectorization

我想在以下代码中对3个嵌套的for循环进行向量化:

    StepX=sqrt(3/2);
    StepY=sqrt(1/2);
    StepZ=sqrt(3);
    AuxX=StepX/6;
    AuxY=StepY/2;
    AuxZ=StepZ/3;

    n=1
    for i=0:L_x-1;
     for j=0:L_y-1;
      for k=0:L_z-1;
             A1(n,:)=[0+i*StepX 0+j*StepY 0+k*StepZ];  % Layer A1  
             A2(n,:)=[3*AuxX+i*StepX AuxY+j*StepY 0+k*StepZ]; %  Layer A2
             B1(n,:)=[2*AuxX+i*StepX 0+j*StepY AuxZ+k*StepZ]; % Layer B1
             B2(n,:)=[5*AuxX+i*StepX AuxY+j*StepY AuxZ+k*StepZ]; % Layer B2    
             C1(n,:)=[4*AuxX+i*StepX 0+j*StepY 2*AuxZ+k*StepZ]; % Layer C1
             C2(n,:)=[1*AuxX+i*StepX 1*AuxY+j*StepY 2*AuxZ+k*StepZ]; % Layer C2
             n=n+1;
       end
     end
    end

我试着这样做:

 [A1_X,A1_Y,A1_Z] = ndgrid(0*AuxX:StepX:L_x-1,0*AuxY:StepY:L_y-1,0*AuxZ:StepZ:L_z-1);
A1 = [A1_X(:),A1_Y(:),A1_Z(:)]; % Layer A1

 [A2_X,A2_Y,A2_Z] = ndgrid(3*AuxX:StepX:L_x-1,1*AuxY:StepY:L_y-1,0*AuxZ:StepZ:L_z-1);
A2 = [A2_X(:),A2_Y(:),A2_Z(:)]; % Layer A2

[B1_X,B1_Y,B1_Z] = ndgrid(2*AuxX:StepX:L_x-1,0*AuxY:StepY:L_y-1,1*AuxZ:StepZ:L_z-1);
B1 = [B1_X(:),B1_Y(:),B1_Z(:)]; % Layer B1

 [B2_X,B2_Y,B2_Z] = ndgrid(5*AuxX:StepX:L_x-1,1*AuxY:StepY:L_y-1,1*AuxZ:StepZ:L_z-1);
B2 = [B2_X(:),B2_Y(:),B2_Z(:)]; % Layer B2

[C1_X,C1_Y,C1_Z] = ndgrid(4*AuxX:StepX:L_x-1,0*AuxY:StepY:L_y-1,2*AuxZ:StepZ:L_z-1);
C1 = [C1_X(:),C1_Y(:),C1_Z(:)]; % Layer C1

[C2_X,C2_Y,C2_Z] = ndgrid(1*AuxX:StepX:L_x-1,1*AuxY:StepY:L_y-
1,2*AuxZ:StepZ:L_z-1);
C2 = [C2_X(:),C2_Y(:),C2_Z(:)]; % Layer C1

似乎我对每一层的端点都不够谨慎,所以网格搞砸了。你能帮我解决一下吗?

提前致谢!

1 个答案:

答案 0 :(得分:0)

经过几天的思考,我想出了一个简单的解决方案:

{{1}}

对于矢量化版本,L_x = 80,L_y = 20和L_z = 20需要大约0.008秒。 但是,使用嵌套循环版本,相同值需要大约1.9秒。