Nueva respuesta:
Puede acelerar la solución DEC2BINsuggested by AB (con una asistencia por woodchips) por lugar de utilizar la función BITGET. Hay dos maneras de abordar esto. El primero utiliza la función REPMAT para hacer las entradas iguales en tamaño (ambas matrices 32-by-5):
allCombos = bitget(repmat((0:31)',1,5),repmat(5:-1:1,32,1));
y la segunda llama simplemente BITGET una vez por cada bit individual que desea obtener:
vec = (0:31)';
allCombos = [bitget(vec,5) bitget(vec,4) bitget(vec,3) ...
bitget(vec,2) bitget(vec,1)];
y aquí están algunos tiempos de muestreo:
Method | Average Time
-----------------+------------------
DEC2BIN | 0.000788 s
BITGET+REPMAT | 0.000727 s
BITGET x5 | 0.000045 s
Como se puede ver, el BITGET desenrollado es muy rápido.
vieja respuesta: (para la posteridad)
Si estás interesado en la construcción de una matriz de cada posible vector de de ceros y unos que tiene una longitud de 5, esto sería una forma hacerlo utilizando las funciones PERMS y UNIQUE (desde PERMS crea filas repetidas):
allCombos = [0 0 0 0 0;
unique(perms([0 0 0 0 1]),'rows'); ...
unique(perms([0 0 0 1 1]),'rows'); ...
unique(perms([0 0 1 1 1]),'rows'); ...
unique(perms([0 1 1 1 1]),'rows'); ...
1 1 1 1 1];
Gracias! Creo que esto es exactamente lo que necesito. –
@Kiran: tenga en cuenta que primero tiene que elegir un vector de 5 elementos de unos y ceros para comenzar, entonces PERMS le dará cada permutación de eso. – gnovice
Gracias por el consejo, gnovice. Esto hace que mi código sea mucho más rápido que antes y eso es realmente bueno. –