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

在Matlab中生成矩阵的所有可能组合,matlab,matrix,combinations,Matlab,Matrix,Combinations,知道一个N*M矩阵的元素只能是0或1,我如何为它生成所有可能的值 例如,如果我想要一个2*2矩阵,我们会得到16个具有不同可能组合的矩阵:[0;0],[11;1],[10;0 1],[11;0],[0;1]…等- combs = dec2base(0:power(2,N*M)-1,2) - '0' 这将生成行中所有可能的组合。因此,要选择任何组合,您需要索引到梳子。因此,第一个组合[0,0,0,0]将在combs(1,:)处可用,最后一个组合[1,1,1,1]将在comb(end,:)处可用

知道一个N*M矩阵的元素只能是0或1,我如何为它生成所有可能的值

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

combs = dec2base(0:power(2,N*M)-1,2) - '0'
这将生成行中所有可能的组合。因此,要选择任何组合,您需要索引到
梳子
。因此,第一个组合
[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\u-matshaped(:,:,1)
,对于最后一个组合,请使用
combs\u-matshaped(:,:,end)

另一种可能性(尽管更简单,可能更快):


完美的回答!哦,也许只需添加
重塑(梳(1,:),N,M)
即可completeness@Divakarcombs(1,:)将把它提取为向量而不是矩阵,有没有不使用循环的方法呢?这很好,Dan回答me@AmiraAkra检查编辑如何得到这些矩阵没有循环和一切在一次过!
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),...