在Matlab中生成Matrix的所有可能组合

Ami*_*kra 2 matlab combinations matrix

如何知道N*M矩阵的所有可能值,知道该矩阵的元素只能是0或1?

例如,如果我想要一个2*2矩阵,我们得到16个具有不同可能组合的矩阵:[0 0; 0 0],[1 1; 1 1],[1 0; 0 1],[1 1; 0 0],[0 0; 1 1] ......等

Div*_*kar 6

使用dec2base-

combs = dec2base(0:power(2,N*M)-1,2) - '0'
Run Code Online (Sandbox Code Playgroud)

这会在行中生成所有可能的组合.因此,要选择任何组合,您需要索引combs.因此,第一个组合[0,0,0,0]将在combs(1,:),最后一个[1,1,1,1]将在comb(end,:).

如果您的可能值来自不同的集合0,1,2,3,请执行此编辑 -

combs = dec2base(0:power(4,N*M)-1,4) - '0'
Run Code Online (Sandbox Code Playgroud)

如果要获得与输入矩阵大小相同的组合,请使用此 -

combs_matshaped = reshape(permute(combs,[3 2 1]),N,M,[])
Run Code Online (Sandbox Code Playgroud)

这创建了具有与组合一样多的2D切片的3D阵列,并且矩阵的每个组合与第三维索引"可索引".例如,如果您打算获得第一个组合,请使用combs_matshaped(:,:,1)和最后一个组合使用combs_matshaped(:,:,end).

  • 完美,很棒的答案!哦,也许只需要添加`reshape(combs(1,:),N,M)`来完成 (3认同)