Another question on eliminating for loops....

조회 수: 1 (최근 30일)
Howard Wilton
Howard Wilton 2022년 11월 23일
댓글: Howard Wilton 2022년 11월 23일
I would like to eliminate for loops in the following code,
L=3; N=L; R=L^2 * N^2;
mat = int8(zeros(R,4));
ind = 1;
for n = 0:N-1
for p = 0:N-1
for l = 0:L-1
for q = 0:L-1
mat(ind,:) = [n,p,l,q];
ind = ind + 1;
end
end
end
end
Would welcome any insights.

채택된 답변

John D'Errico
John D'Errico 2022년 11월 23일
편집: John D'Errico 2022년 11월 23일
Try it. If you can't see ndgrid doing it, then look harder. :) (By the way, lower case l (L) is a really bad variable name to use. DID I write a lower case L there, or was it the number 1, or perhaps an upper case I (i)?) Depending on the font, all of those characters/numbers can easily be confused. Your code will suffer from nasty bugs one day, due to typos, that you will never be able to find.
Anyway...
L=3; N=L;
[x,y,z,w] = ndgrid(0:N-1,0:N-1,0:L-1,0:L-1);
xyzw = [x(:),y(:),z(:),w(:)]
xyzw = 81×4
0 0 0 0 1 0 0 0 2 0 0 0 0 1 0 0 1 1 0 0 2 1 0 0 0 2 0 0 1 2 0 0 2 2 0 0 0 0 1 0
If you don't like the sequence generated by ndgrid with the first column moving fastest, then a sort will fix that.
xyzw = sortrows(xyzw,[1 2 3 4])
xyzw = 81×4
0 0 0 0 0 0 0 1 0 0 0 2 0 0 1 0 0 0 1 1 0 0 1 2 0 0 2 0 0 0 2 1 0 0 2 2 0 1 0 0

추가 답변 (1개)

Steven Lord
Steven Lord 2022년 11월 23일
Take a look at the ndgrid function.
  댓글 수: 3
Torsten
Torsten 2022년 11월 23일
편집: Torsten 2022년 11월 23일
Ok, the order of the rows within the matrix has changed, but does it matter ?
Howard Wilton
Howard Wilton 2022년 11월 23일
i didn't see it, but yes... sortrows and all is good.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기

제품


릴리스

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by