来自给定集合的组合没有重复

时间:2013-12-06 14:57:22

标签: matlab matrix

假设我有一个定义如下的矩阵

M = [C1 C2 C3 C4]

C是列向量 我想要一些有效的(即没有for循环)方法来产生A矢量,这样

ResultVec = [C1 C2; 
             C1 C3; 
             C1 C4;
             C2 C3; 
             C2 C4; 
             C3 C4]

提前致谢!

2 个答案:

答案 0 :(得分:10)

nchoosek做的事情:

M = [ 1 2 3 4 ];

R = nchoosek(M,2);

返回:

R =

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

我不知道这是否是你的意图,但是nchoosek是Matlabs实现的 来自n个元素的给定集合S中的k组合的数量,没有重复 Wikipedia

虽然功能nchoosek在性能方面不是很有效。但是在File Exchange上有等价物,它们(!!)的速度更快,并且做得更好。


为了说清楚,它不仅适用于上面相当简单的例子,而且不会返回任何索引。它可以根据需要直接转换矩阵。

M = [ 21 42 123 17 ];

返回:

R =

    21    42
    21   123
    21    17
    42   123
    42    17
   123    17

答案 1 :(得分:4)

这是我提出的最简单的方法:

n = size(M, 2);
[j, i] = ind2sub([n n], find(~triu(ones(n))));
ResultVec = M(:, [i j]);
ResultVec = reshape(ResultVec, [], 2)