我想在以下代码中对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
似乎我对每一层的端点都不够谨慎,所以网格搞砸了。你能帮我解决一下吗?
提前致谢!
答案 0 :(得分:0)
经过几天的思考,我想出了一个简单的解决方案:
{{1}}
对于矢量化版本,L_x = 80,L_y = 20和L_z = 20需要大约0.008秒。 但是,使用嵌套循环版本,相同值需要大约1.9秒。