2014-03-27 346 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')。无论如何,这可能是值得一个问题 –