How do I create multiple for loops depending on the array size?
17 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
I would like to iterate over multiple for-loops, but the amount of for-loops depends on the size of a vector. Is there a good way to do this, without using a lot of if-statements?
arr = [a1 a2 ... an]
for a1=1:...
for a2=1:...
...
for an=1:...
%do something
end
end
end
for for examle if the vector arr has "n" entries I would like to have "n" for loops.
0 commentaires
Réponse acceptée
Jan
le 20 Mai 2018
Modifié(e) : Jan
le 20 Mai 2018
As in the answers you find in Stephen's links: Use an index vector instead of a list of for loops. Replace:
arr = [a1 a2 ... an]
for i1 = 1:a1
for i2 = 1:a2
...
for in = 1:an
%do something with [i1, i2, ... in]
end
end
end
By:
% Loops from 1 to a(n):
n = length(arr)
ini = ones(1, n);
fin = [a1 a2 ... an];
v = ini;
iterN = prod(find - ini + 1); % Number of iterations
for iter = 1:iterN
% Do something with v
...
% Increase index vector:
for k = 1:n % Or n:-1:1, as you want to
if v(k) < fin(k)
v(k) = v(k) + 1;
break; % Stop "for k" loop
end
v(k) = ini(k); % Reset this index
end
end
0 commentaires
Plus de réponses (2)
Stephen23
le 20 Mai 2018
Modifié(e) : Stephen23
le 20 Mai 2018
A recursive function is the obvious solution, although this depends on whether you count recursive functions as being "a good way to do this", as they are famously fickle beasts, and are not always easy to debug. Often the best solution is to use indexing, as Jan Simon explained in this answer. Recursive functions, indexing and other solutions have been discussed before:
0 commentaires
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!