たとえば、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]
たとえば、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]
これは、数値データの代わりに文字列のセットで動作するように適合された、デカルト積について言及した同じコードです。
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'