Asked by Rik
on 28 Dec 2012

Dear all,

I would like to create a matrix with all possibilities, such as the following: [1 1 1; 1 1 0; 1 0 1; 0 1 1; 1 0 0; 0 1 0; 0 0 1; 0 0 0]

I have tried to use nchoosek([0 0 0 1 1 1],3) but this function fails in ordering. Furthermore I tried C = npermutek([ones(1,3) zeros(1,3)],3); D = unique(C,'rows'), but this one gives a out of memory error for larger vectors (8 instead of 3). For this function see: http://www.mathworks.com/matlabcentral/fileexchange/11462-npermutek/

How to create such a matrix?

*No products are associated with this question.*

Answer by Jan Simon
on 28 Dec 2012

Searching the FileExchange for the terms "combinations" and "permutations" helps to find:

- http://www.mathworks.com/matlabcentral/fileexchange/26242-vchoosekro as fast C-Mex function,
- http://www.mathworks.com/matlabcentral/fileexchange/24325-combinator-combinations-and-permutations as general M-functions for combinations/permutations with or without repetitions and ordering.

Answer by Azzi Abdelmalek
on 28 Dec 2012

Edited by Azzi Abdelmalek
on 28 Dec 2012

out=[] n=3 for k=1:n s=[ones(2^(n-k ),1) ;zeros(2^(n-k ),1)] s=repmat(s,2^(k-1),1) out=[out s] end

Answer by Roger Stafford
on 29 Dec 2012

Here is a variation on Azzi's solution:

A = ones(2^n,n); p = 1; for k = 0:n-1 A(p+1:2*p,n-k:n) = [zeros(p,1),A(1:p,n-k+1:n)]; p = 2*p; end

To count up instead of down, swap the 'ones' and 'zeros' calls.

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi test

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments