Nuova risposta:
È possibile accelerare la soluzione DEC2BINsuggested by AB (con assist di woodchips) dal posto utilizzando la funzione BITGET. Ci sono due modi per affrontarlo. Il primo utilizza la funzione REPMAT per rendere gli ingressi uguali dimensioni (entrambe le matrici 32-by-5):
allCombos = bitget(repmat((0:31)',1,5),repmat(5:-1:1,32,1));
e la seconda chiama semplicemente BITGET una volta per ogni singolo bit che si desidera ottenere:
vec = (0:31)';
allCombos = [bitget(vec,5) bitget(vec,4) bitget(vec,3) ...
bitget(vec,2) bitget(vec,1)];
e qui ci sono alcuni tempi di esempio:
Method | Average Time
-----------------+------------------
DEC2BIN | 0.000788 s
BITGET+REPMAT | 0.000727 s
BITGET x5 | 0.000045 s
Come si può vedere, la srotolato BITGET è molto veloce.
Vecchia risposta: (per i posteri)
Se si vogliono costruire una matrice di ogni possibile vettore di zero e uno che ha una lunghezza di 5, questo sarebbe un modo di farlo utilizzando le funzioni PERMS e UNIQUE (dal PERMS crea righe ripetute):
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];
Grazie! Penso che questo sia esattamente ciò di cui ho bisogno. –
@Kiran: tieni presente che devi prima scegliere un vettore a 5 elementi di uno e zero per iniziare, quindi PERMS ti darà ogni permutazione di quello. – gnovice
Grazie per il suggerimento, gnovice. Questo rende il mio codice molto più veloce rispetto a prima e questo è davvero buono. –