守候你守候我
2019-07-05 15:40:18
生成某些向量元素的所有可能組合(笛卡爾積)我想要生成給定數(shù)量的向量元素的所有可能組合。例如,對于[1 2], [1 2]和[4 5]我想要生成元素:[1 1 4; 1 1 5; 1 2 4; 1 2 5; 2 1 4; 2 1 5; 2 2 4; 2 2 5]問題是,我不知道需要計算組合的向量的數(shù)量。在這種情況下可能有3,或者可能有10,我需要一個泛化..你能幫我用MATLAB嗎?是否已經有可執(zhí)行此任務的預定義函數(shù)?
3 回答

慕哥6287543
TA貢獻1831條經驗 獲得超10個贊
sets = {[1 2], [1 2], [4 5]};[x y z] = ndgrid(sets{:});cartProd = [x(:) y(:) z(:)];cartProd = 1 1 4 2 1 4 1 2 4 2 2 4 1 1 5 2 1 5 1 2 5 2 2 5
function result = cartesianProduct(sets) c = cell(1, numel(sets)); [c{:}] = ndgrid( sets{:} ); result = cell2mat( cellfun(@(v)v(:), c, 'UniformOutput',false) );end
cartProd = sortrows(cartProd, 1:numel(sets));
{[1 1] [1 2] [4 5]}
sets = cellfun(@unique, sets, 'UniformOutput',false);

楊魅力
TA貢獻1811條經驗 獲得超6個贊
ndgrid
如果您有神經網(wǎng)絡工具箱:使用 如果你做了 不
擁有工具箱,就像通常的情況一樣:下面是將笛卡兒積推廣到任意數(shù)量集合的另一種方法。
v{:}
ndgrid
cellfun
cell2mat
cat
:
N = numel(a);v = cell(N,1);[v{:}] = ndgrid(a{:});res = reshape(cat(N+1,v{:}),[],N);
cat
reshape
添加回答
舉報
0/150
提交
取消