1

我通过@Lambdageek 找到了这个解决方案,解决了在 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

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

4

3 回答 3

4

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

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

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

对于您的示例,这将返回

uniquepairs =
     1     2
     1     3
     2     3
于 2013-09-26T21:05:25.957 回答
3

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

[p, q] = meshgrid(1:n, 1:n);
mask   = triu(ones(n), 1) > 0.5;
pairs  = [p(mask) q(mask)];
于 2013-09-26T20:06:20.410 回答
1

最简单的方法可能是这样的:

uniquePairs = nchoosek(1:n,2)

或者,就任意向量而言v

uniquePairs = nchoosek(v,2)
于 2013-09-26T21:17:42.763 回答