我在@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
有谁知道这个优雅的解决方案?谢谢!
答案 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)