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?

Réponses (4)

Jan
Jan le 28 Déc 2012

0 votes

Searching the FileExchange for the terms "combinations" and "permutations" helps to find:
Azzi Abdelmalek
Azzi Abdelmalek le 28 Déc 2012
Modifié(e) : Azzi Abdelmalek le 28 Déc 2012

0 votes

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
Roger Stafford
Roger Stafford le 29 Déc 2012

0 votes

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.
Antonio Adaldo
Antonio Adaldo le 20 Jan 2021

0 votes

The matrix that you want is the same as the matrix containing the binary digits of the numbers from zero to seven. For example: "0 0 0" is zero, "0 0 1" is one, "0 1 0" is two, etc.
If you have Communications Toolbox installed, MATLAB offers the function "de2bi" to produce that matrix. For example:
de2bi(0:7)
ans =
0 0 0
1 0 0
0 1 0
1 1 0
0 0 1
1 0 1
0 1 1
1 1 1
Documentation for "de2bi" is found here: https://www.mathworks.com/help/comm/ref/de2bi.html

Catégories

En savoir plus sur MATLAB dans Centre d'aide et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by