How do I make a (2^m x m) dimensional matrix containing all possible combinations of 1s and 0s?
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Thomas Casey
el 4 de Feb. de 2014
Comentada: Thomas Casey
el 5 de Feb. de 2014
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!
0 comentarios
Respuesta aceptada
Más respuestas (1)
Matt J
el 4 de Feb. de 2014
A non-lazy way
[c{m:-1:1}]=ndgrid([0,1]);
result=reshape( cat(m+1,c{:}),[],m)
4 comentarios
Matt J
el 5 de Feb. de 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.
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!