2016-11-17 128 views
1

我有幾個向量或向量列表,並且希望彌補它們條目的所有可能的連接。這裏有一個例子:元素/向量/向量列表(笛卡爾積)的所有可能組合

a1=4; 
a2=[1,6;1,9;6,9]; 
a3=[2;7]; 

這一切都應該導致:

[4,1,6,2] 
[4,1,6,7] 
[4,1,9,2] 
[4,1,9,7] 
[4,6,9,2] 
[4,6,9,7] 

我想我的問題是,類似這樣的:Generate all possible combinations of the elements of some vectors (Cartesian product)但我不是真的能夠答案適應我的問題。

編輯: 再次感謝您的答覆和更正!正如燒杯已經說過它的作品像八度的魅力。現在我想讓它更靈活一些,可以將任意數量的a結合到單元陣列中(或者更適合潛在解決方案的任何其他結構)。我編寫了一個字符串,然後編寫它。但是這對我來說似乎並不高雅。是否有可能更多...算法?

+0

你是不是指最後兩個輸出中的'6,9'? –

+0

@LuisMendo說「是」很安全...... –

回答

2

我在回答使用MATLAB,希望相同的代碼也能在Octave中工作。


下面是問題的基礎上Amro's answer一個解決方案,您鏈接:

a1=4; 
a2=[1,6;1,9;6,9]; 
a3=[2;7]; 

nRows = [size(a1,1), size(a2,1), size(a3,1)]; 

[x,y,z] = ndgrid(1:nRows(1),1:(nRows(2)),1:(nRows(3))); 
cartProd = [a1(x(:),:) a2(y(:),:) a3(z(:),:)]; 

導致:

cartProd = 

    4  1  6  2 
    4  1  9  2 
    4  6  9  2 
    4  1  6  7 
    4  1  9  7 
    4  6  9  7 

這是一個稍微不同的順序比你表現出什麼,但我認爲它對你仍然有用。

+2

在八度工作正常。 :) – beaker