0

是否有一个简单的命令可以做到这一点:

M = 0 0 0
    0 0 1
    0 1 0
    0 1 1
    1 0 0
    1 0 1
    1 1 0
    1 1 1

我找到了这个http://www.mathworks.co.kr/matlabcentral/fileexchange/7147-combn--4-3-但这在matlab中还不是一个东西

试过M = combn([0 1],3)了,我得到了 Undefined function 'combn' for input arguments of type 'double'. in return

4

2 回答 2

2

您正在寻找 matlab 的perms()功能。

v0=[0 0 0]; 
v1=[1 0 0];
v2=[1 1 0];
v3=[1 1 1]; 
p1=perms(v1);
p2=perms(v2);
combs = cat(1,v0,p1,p2,v3);

这当然给出了所有排列,这意味着顺序很重要(即使对于零),因此只获得您可以使用的唯一组合:

combs=unique(combs,'rows');

这使:

combs =
     0     0     0
     0     0     1
     0     1     0
     0     1     1
     1     0     0
     1     0     1
     1     1     0
     1     1     1

作为旁注,如果您从文件交换器下载文件,请确保它位于您的 matlab 路径或当前目录中,这将避免未知函数错误。您可以在此处阅读有关 matlab 路径如何工作的信息

于 2014-04-29T20:42:15.180 回答
2

0一种简单的方法是从to生成所有数字2^n-1,其中n是行数,并将它们转换为二进制:

n = 3;
result = dec2bin(0:2^n-1)-'0';

或者将这个问答具体化到您的案例中。

于 2014-04-29T22:20:14.683 回答