-2

たとえば、2 つのベクトルが[A B C]あり、[E F G]

今、私は以下のようなマトリックスが欲しいです:

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

1 に答える 1

1

これは、数値データの代わりに文字列のセットで動作するように適合された、デカルト積について言及した同じコードです。

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{:})';

これは、それぞれが任意の数の要素を持つ任意の数のセットに対して機能します。

上記の例の結果の組み合わせ (行ごとに 1 つ):

>> 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'
于 2013-08-18T00:32:32.763 に答える