Borrar filtros
Borrar filtros

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)
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!

Respuesta aceptada

Matt J
Matt J el 4 de Feb. de 2014
Editada: Matt J el 4 de Feb. de 2014
The lazy way
result = dec2bin(0:2^m-1,m)-'0'

Más respuestas (1)

Matt J
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
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.
Thomas Casey
Thomas Casey el 5 de Feb. de 2014
Yea it worked when I copied and pasted, I must have typed something wrong the first time. That is the fastest way, another person suggested this:
m=3;
mat = nan(2^m,m);
for idx = 1:m
mat(:,idx) = repmat([zeros(2^(m-idx),1);ones(2^(m-idx),1)],2^(idx-1),1);
end;
which is slower but still much much faster than dec2bin.
On my computer, m=3, I got 0.003s (reshape), 0.3s (dec2bin), and 0.0056s (repmat).
Thanks again!

Iniciar sesión para comentar.

Categorías

Más información sobre Startup and Shutdown 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!

Translated by