how to write code to try every combination of N-dim vector?

Hello, I want to write a code to try every combination of a N-dimentional vector(with entry 0 or 1 or 2). For example, if N=3, all combinations are (0,0,0)(0,0,1)...(2,2,2) and there are 3^N=27.
One brutal way is for commands: for i=0:2->for j=... but I have to write N these for commands, which is not wise. I wonder it there a fast and smart way to try all combinations?
Thanks a lot!

 Accepted Answer

[xx yy zz] = ndgrid(0:2);
[xx(:) yy(:) zz(:)]
Generalized (fixed)
n = 4
[C{1:n}] = ndgrid(0:2);
for ii = n:-1:1
M(:,ii) = C{ii}(:);
end

9 Comments

Hello, Sean, thanks, but N is also a parameter her, and I do not know if there is 3. In fact, there might be N=5 or 20. If so, how to make it work?
Thank you!
Oh, great! Thank you so much!
If I want to try all combination and find the maximizer, how could I write the recurrent command? for example, I have a function of the 4-dim vector, and it is the sum of 4 entries, I want to compare and find the maximizer. Of course it would be (2,2,2,2) but I want computer to visit every combination and compare and then find the maximizer and maximum value which is 8. Could you advise?
You are awesome!
M = reshape(...from above)
sum(M,2);
[~, row_max] = max(sum(M,2))
Hi, Sean, thanks!
Sorry I did not make it clear! :-) The function can be complex, and I want to visit every combination (say 3^N) and solve the function value and then compare, what is the general code for it please?
Hope you can understand!
Can I write like this:
For i=1 to 3^N
[a1,a2,a3,a4]=M(i,:);
then define function and solve the value;
compare and find the maximizer;
end;
It works well I think.
Hi, the code does not work and try all combinations:
n = 4
[C{1:n}] = ndgrid(0:2);
reshape(vertcat(C{:}),[],n)
In deed, it has many same combinations.
This is true. I messed up on thinking reshape() would account for the order of the cells being stacked. It did not, see update.

Sign in to comment.

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!