create a variable number of nested for loops? select elements in matrix with variables dimensions?
조회 수: 3 (최근 30일)
이전 댓글 표시
hi,
i have a fucntion with a matrix that has variables dimensions (depends on a parameter given in input) and i would like to scan all the elements inside, but the fact is that i don't know how to nest many for loops.
let´s make an example: M is a matrix 3 dimensional with length [2,4,6]
i would like to do:
for i1:1=2
for i2:1=4
for i3:1=6
M(i1,i2,i3) = 0;
end
end
end
as you can notice, i need 3 loops, but how to use N loops, with N the number of dimensions of M (N is fixed once that function is called)? i thought about using eval, but it seems not working..
another related question, i would like to access to element M(i1,i2,i3) if N=3 or M(i1,i2,i3,i4,i5) if N=5, should i use eval also in this case, or is there any better solution?
thanks in advance
댓글 수: 0
채택된 답변
Walter Roberson
2012년 5월 30일
The particular example you give can be written as
M(1:2,1:4,1:6) = 0;
With regards to the nested loop: turn them into a single loop using an "odometer" type mechanism. See my code in https://groups.google.com/group/comp.lang.c/browse_thread/thread/d98842738fa27a55/2f6d5ff877063de1 and Chris Torek's useful modification there.
With regard to variable number of subscripts:
subs = [i1, i2, i3, i4];
subscell = num2cell(subs);
M(subscell{:})
댓글 수: 3
Walter Roberson
2012년 5월 30일
If all of the elements are to be set to 0 without disturbing the size or shape, then M(:) = 0 is easier.
Tom
2012년 5월 30일
Indeed, though in that case it would seem pointless generating the matrix in the first place (or just use the zeros function), so I assume there's some other stuff later in the loop.
추가 답변 (2개)
Henry Charlesworth
2016년 6월 30일
편집: Henry Charlesworth
2016년 6월 30일
So you can do it with eval although not sure it's particularly good practice:
%
nLoops=3;
str = '';
for i=1:nLoops
str = sprintf('%s \n for i%d=1:5',str,i);
end
str = sprintf('%s \n [i1 i2 i3]',str);
for i=1:nLoops
str = sprintf('%s \n end',str);
end
eval(str)
댓글 수: 1
Walter Roberson
2016년 7월 1일
eval() is not recommended at all. It is fairly prone to mistakes, and always inefficient.
참고 항목
카테고리
Help Center 및 File Exchange에서 Loops and Conditional Statements에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!