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

时间:2014-09-03 09:40:06

标签: matlab matrix combinations

如何知道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] ......等

2 个答案:

答案 0 :(得分:6)

使用 dec2base -

combs = dec2base(0:power(2,N*M)-1,2) - '0'

这会在行中生成所有可能的组合。因此,要选择任何组合,您需要索引到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'

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

combs_matshaped = reshape(permute(combs,[3 2 1]),N,M,[])

这将创建一个包含与组合一样多的2D切片的3D数组,并且矩阵的每个组合与第三维索引“可索引”。例如,如果您打算获得第一个组合,请使用combs_matshaped(:,:,1),对于最后一个组合,请使用combs_matshaped(:,:,end)

答案 1 :(得分:1)

另一种可能性(尽管Divakar's answer更简单且可能更快):

c = cell(1,N*M);
[c{end:-1:1}] = ndgrid([0 1 2 3 ]); %// or change set of values: [0 1 2 3] etc
combs = cell2mat(cellfun(@(x) x(:), c, 'uni', 0)); %// results as row vectors
combs = reshape(combs.',N,M,[]); %// NxM matrices: combs(:,:,1), combs(:,:,2),...