如何生成向量元素的唯一对 - 忽略对元素的顺序

时间:2013-09-26 20:03:43

标签: matlab

我在@Lambdageek中找到了solution来解决在Matlab中生成向量元素对的问题:

[p,q] = meshgrid(vec1, vec2);
pairs = [p(:) q(:)];

但是我想从向量的元素生成唯一的对,让我们说[1 2 3]。 [1 2]和[2 1]我会认为是同一对的副本,我想忽略对元素的顺序。

1 2
1 3
2 1
2 3 
3 1
3 2

应该减少到:

1 2
1 3
2 3

有谁知道这个优雅的解决方案?谢谢!

3 个答案:

答案 0 :(得分:4)

您可以对每一行进行排序,然后查找唯一的行:

uniquepairs = unique(sort(pairs,2), 'rows')

即使您有两列以上,这也可以正常工作。

对于您的示例,这将返回

uniquepairs =
     1     2
     1     3
     2     3

答案 1 :(得分:3)

假设向量的长度为n,使用上三角矩阵生成掩码:

[p, q] = meshgrid(1:n, 1:n);
mask   = triu(ones(n), 1) > 0.5;
pairs  = [p(mask) q(mask)];

答案 2 :(得分:1)

最简单的方法可能就是:

uniquePairs = nchoosek(1:n,2)

或者,就任意向量v而言:

uniquePairs = nchoosek(v,2)