Flattens arbitrarily nested loops into a single loop that iterates over all combinations of loop parameters.
Makes it very easy to change the iteration parameters without rewriting loops, reindenting code, updating indices, etc.
Very convenient for simulation problems where the parameters being tested frequently change, but the computation stays the same.
Nested loop code like this:
avalues = [1 2]; bvalues = [10 20]; cvalues = [100 200 300];
for ai = 1:length(avalues)
for bi = 1:length(bvalues)
for ci = 1:length(cvalues)
scoretable(ai,bi,ci) = avalues(ai) + bvalues(bi) + cvalues(ci);
end
end
end
Can be flattened into this, and any parameter can be added or removed by changing only paramvariables and paramvalues:
paramvariables = {'A' 'B' 'C'};
paramvalues = { {1 2} {10 20} {100 200 300}};
piter = paramiterator(paramvariables,paramvalues);
for i = 1:length(piter)
setvalues(piter,i);
scorelist(i) = A + B + C;
end
scoretable = listtotable(piter,scorelist);
Results can be easily displayed with displaytable (http://www.mathworks.com/matlabcentral/fileexchange/27920-displaytable).
You can now test whether a parameter has changed since the last iteration, before running some computation. This is like nesting the computation within only some of the loops, making paramiterator a full replacement for nested loops. |