Faster method of creating list of looped row vectors?
1 次查看(过去 30 天)
显示 更早的评论
At the moment I have the following code:
kres=1;
kz=0;
K=[];
for kx=-3:kres:3
for ky=-3:kres:3
k=[kx,ky,kz];
K=[K;k];
end
end
to achieve a list of row vectors in the form:
[-3,-3,0;-3,-2,0;-3,-1,0;-3,0,0;....;3,2,0;3,3,0]
However when kres is reduced to < 0.01 this loop takes a long time to compute. Is there a faster way to achieve the same result without having to have a loop within a loop?
0 个评论
采纳的回答
Bjorn Gustavsson
2015-7-6
kres=1; kz=0; K=[]; This is the way I'd go about it:
x = -3:kres:3;
y = -3:kres:3;
z = 0;
[x,y,z] = meshgrid(x,y,z);
K = [x(:),y(:),z(:)];
HTH
更多回答(2 个)
Keith Hooks
2015-7-6
You'll see quite a bit of improvement if you pre-allocate K. I understand the coding is not as clean, but the speed improvement is close to 5X for the 0.1 resolution.
Original: Elapsed time is 0.027472 seconds .
With pre-allocation: Elapsed time is 0.005479 seconds .
kres=.1;
kz=0;
kx = -3:kres:3;
ky = -3:kres:3;
n = length(kx);
m = length(ky);
K=zeros(n*m,3);
for i=1:n
for j=1:m
k=[kx(i),ky(j),kz];
K((i-1)*n + j,:) = k;
end
end
0 个评论
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!