2013-08-17 34 views
-2

说两个向量的,我有两个矢量[A B C][E F G]序列生成在MATLAB

现在,我想是这样下面的矩阵:

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

请提供一些更多的细节,你什么都尝试过的例子至今。 – BartoszKP

+0

A,B,...是什么类?双打,字符,...?另外,他们是标量? – Oleg

+1

看起来你正在做*笛卡尔产品*(尽管你缺少一些组合:ABG,EFC)。看到这里:http://stackoverflow.com/questions/4165859/matlab-generate-all-possible-combinations-of-the-elements-of-some-vectors – Amro

回答

1

这里是我为Cartesian product提到same code,适于使用字符串而不是数字数据:

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'