How do I make a (2^m x m) dimensional matrix containing all possible combinations of 1s and 0s?
Show older comments
I need to make an n x m matrix with arbitrary m such that n is the number of possible ways to write a m length vector of 1s and 0s (2^m). Example: if m=2, n=4 meaning I have: [1 0], [0 1], [0,0], and [1,1] and can construct the matrix [1 0;0 1;0 0;1 1].
I can not figure out the code to scale this up to higher m in the case where I may have m=3,4,5... and n becomes too large to enter manually. I want to be able to automatically generate the same kind of matrix for any value of m.
This is the Rstudio code someone gave me but I can't translate it:
for(j in 1:m) S <- cbind(S,rep(c(1,0),each=2^(m-j),times=2^(j-1)))
Any help would be much appreciated!
Thank you!
Accepted Answer
More Answers (1)
Matt J
on 4 Feb 2014
A non-lazy way
[c{m:-1:1}]=ndgrid([0,1]);
result=reshape( cat(m+1,c{:}),[],m)
4 Comments
Thomas Casey
on 5 Feb 2014
Works fine for me...
>> m=3; [c{m:-1:1}]=ndgrid([0,1]);
result=reshape( cat(m+1,c{:}),[],m)
result =
0 0 0
0 0 1
0 1 0
0 1 1
1 0 0
1 0 1
1 1 0
1 1 1
Matt J
on 5 Feb 2014
but if anyone else is interested...
If anyone else is interested, this method is preferable when speed matters. Compare,
m=20;
tic;
[c{m:-1:1}]=ndgrid([0,1]);
result=reshape( cat(m+1,c{:}),[],m) ;
toc
%Elapsed time is 0.090184 seconds.
tic;
result = dec2bin(0:2^m-1,m)-'0';
toc
%Elapsed time is 1.032300 seconds.
Thomas Casey
on 5 Feb 2014
Categories
Find more on Matrices and Arrays 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!