Another question on eliminating for loops....
조회 수: 1 (최근 30일)
이전 댓글 표시
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.
댓글 수: 0
채택된 답변
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(:)]
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])
댓글 수: 0
추가 답변 (1개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Resizing and Reshaping Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!