create a variable number of nested for loops? select elements in matrix with variables dimensions?
2 次查看(过去 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!