在matlab中生成两个向量的序列

时间:2013-08-17 23:50:37

标签: matlab matrix combinations combinatorics cartesian-product

说,我有两个向量[A B C][E F G]

现在,我想要一个如下所示的矩阵:

[A B C; E F G ;  A F G; A F C; E B C; E B G]

1 个答案:

答案 0 :(得分:1)

以下是我为same code提到的Cartesian product,适用于处理字符串集而非数字数据:

sets = {{'A' 'E'};   % first position
        {'B' 'F'};   % second position
        {'C' 'G'}};  % third position

[val,~,idx] = cellfun(@unique, sets, 'Uniform',false);
indices = cell(numel(idx),1);
[indices{:}] = ndgrid(idx{:});
cartProd = cellfun(@(ind,v) v(ind(:)), indices, val, 'Uniform',false);
cartProd = vertcat(cartProd{:})';

这适用于任意数量的集合,每个集合都包含任意数量的元素。

上述示例的结果组合(每行一个):

>> cartProd
cartProd = 
    'A'    'B'    'C'
    'E'    'B'    'C'
    'A'    'F'    'C'
    'E'    'F'    'C'
    'A'    'B'    'G'
    'E'    'B'    'G'
    'A'    'F'    'G'
    'E'    'F'    'G'