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

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

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.

## 0 Comments