【问题标题】:All row-combinations of a matrix in a new matrix with matlab带有matlab的新矩阵中矩阵的所有行组合
【发布时间】:2014-03-27 09:11:16
【问题描述】:

我有一个关于 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-"doublecolumns" 来实现。这意味着,当我的对矩阵例如直到“5 6”时,我想用其中 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
....

我希望你明白我的意思:) 任何想法如何解决这个问题?

感谢并致以诚挚的敬意 乔纳斯

【问题讨论】:

    标签: arrays matlab matrix row combinations


    【解决方案1】:
    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
    

    【讨论】:

    • 感谢您的回答。其实这正是我想要的。我现在的另一个问题是尺寸。是否有可能在不使用 nchoosek-command 的情况下创建此矩阵?因为我目前正在编写一个优化算法,该算法将一个长度可能大于 15 的向量作为输入。所以 nchoosek 命令会生成一个巨大的矩阵,该矩阵将在最后一行被缩短。那么你知道如何在不首先生成这个休组合矩阵的情况下对其进行编程吗?提前谢谢你...
    • @Krus 也许使用something like this(使用相同的向量n 次作为输入),然后删除仅顺序不同的行(使用sortunique)。无论如何,这本身可能值得一个问题
    猜你喜欢
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 2012-03-16
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2017-09-25
    • 1970-01-01
    相关资源
    最近更新 更多