生成某些向量元素的所有可能組合(笛卡爾積)我想要生成給定數量的向量元素的所有可能組合。例如,對于[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]問題是,我不知道需要計算組合的向量的數量。在這種情況下可能有3,或者可能有10,我需要一個泛化..你能幫我用MATLAB嗎?是否已經有可執行此任務的預定義函數?
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 5function result = cartesianProduct(sets)
c = cell(1, numel(sets));
[c{:}] = ndgrid( sets{:} );
result = cell2mat( cellfun(@(v)v(:), c, 'UniformOutput',false) );endcartProd = sortrows(cartProd, 1:numel(sets));
{[1 1] [1 2] [4 5]}
sets = cellfun(@unique, sets, 'UniformOutput',false);
楊魅力
TA貢獻1811條經驗 獲得超6個贊
ndgrid
如果您有神經網絡工具箱:使用 如果你做了 不
擁有工具箱,就像通常的情況一樣:下面是將笛卡兒積推廣到任意數量集合的另一種方法。
v{:}ndgridcellfuncell2matcat:
N = numel(a);v = cell(N,1);[v{:}] = ndgrid(a{:});res = reshape(cat(N+1,v{:}),[],N);catreshape
添加回答
舉報
0/150
提交
取消
