我通过@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
有谁知道一个优雅的解决方案?谢谢!
您可以对每一行进行排序,然后查找唯一的行:
uniquepairs = unique(sort(pairs,2), 'rows')
即使您有两个以上的列,这也可以正常工作。
对于您的示例,这将返回
uniquepairs =
1 2
1 3
2 3
假设向量的长度为 n,使用上三角矩阵生成掩码:
[p, q] = meshgrid(1:n, 1:n);
mask = triu(ones(n), 1) > 0.5;
pairs = [p(mask) q(mask)];
最简单的方法可能是这样的:
uniquePairs = nchoosek(1:n,2)
或者,就任意向量而言v
:
uniquePairs = nchoosek(v,2)