2014-03-27 340 views
1

我有一個關於Matlab中矩陣行的所有組合的問題。 我現在有一個具有以下結構的矩陣:新矩陣中的矩陣與矩陣的所有行組合

1 2 
1 3 
1 4 
2 3 
2 4 
3 4 

現在我想要得到的這些「對」所有可能的組合,而無需在同一行中使用數量的兩倍:

1 2 3 4 
1 3 2 4 
1 4 2 3 

而且必須有可能使它成爲n-「雙列」。這意味着,當我對矩陣無二例如,直到「5 6」,我想這些doublecolumns 3創建矩陣:

1 2 3 4 5 6 
1 2 3 5 4 6 
1 2 3 6 4 5 
1 3 2 4 5 6 
1 3 2 5 4 6 
.... 

我希望你明白我的意思:) 以任何想法如何解決這個?

感謝和最好的方面 喬納斯

回答

0
M = [1 2 
    1 3 
    1 4 
    2 3 
    2 4 
    3 4]; %// example data 
n = floor(max(M(:))/2); %// size of tuples. Compute this way, or set manually 

p = nchoosek(1:size(M,1), n).'; %'// generate all n-tuples of row indices 
R = reshape(M(p,:).', n*size(M,2), []).'; %// generate result... 
R = R(all(diff(sort(R.'))),:); %'//...removing combinations with repeated values 
+0

謝謝您的回答。其實這正是我想要的。我現在的問題是現在的規模。有沒有可能創建這個矩陣,而不使用nchoosek命令?因爲我目前正在編寫一個優化算法,該算法將輸入的長度大於15的矢量作爲輸入。因此,nchoosek-command會生成一個巨大的矩陣,這將與最後一行縮短。那麼你有沒有想法如何編程它而不產生第一個這個休組合矩陣?預先感謝您... – Krus

+0

@Krus也許使用[像這樣的東西](http://stackoverflow.com/q/21895335/2586922)(使用相同的向量'n'次作爲輸入),然後刪除不同的行只有他們的順序('sort'和'unique')。無論如何,這可能是值得一個問題 –