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

Matlab 如何生成向量元素的唯一对-忽略对元素的顺序,matlab,Matlab,我通过@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 有人知道一个优雅的解决方案吗?谢谢 假设向量的长度为n,使用上三角矩阵生成掩码: [p, q] = mes

我通过@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

有人知道一个优雅的解决方案吗?谢谢

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

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

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

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

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

uniquepairs = unique(sort(pairs,2), 'rows')
即使您有两个以上的列,这也可以正常工作

对于您的示例,这返回

uniquepairs =
     1     2
     1     3
     2     3

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

uniquepairs = unique(sort(pairs,2), 'rows')
即使您有两个以上的列,这也可以正常工作

对于您的示例,这返回

uniquepairs =
     1     2
     1     3
     2     3

最简单的方法可能是:

uniquePairs = nchoosek(1:n,2)
或者,对于任意向量v:


最简单的方法可能是:

uniquePairs = nchoosek(1:n,2)
或者,对于任意向量v:


美丽的谢谢你!通常情况下,似乎不适用于向量。例如:vec1=1:3,vec2=10:-1:8将给出错误的结果,我甚至不知道如何将其用于长度不等的向量。正如在参考问题中一样。只需使用矢量对作为结果。至于长度不等,OP说的是一个向量,而不是两个向量!谢谢你!通常情况下,似乎不适用于向量。例如:vec1=1:3,vec2=10:-1:8将给出错误的结果,我甚至不知道如何将其用于长度不等的向量。正如在参考问题中一样。只需使用矢量对作为结果。至于长度不等,OP说的是一个向量,而不是两个向量,解决方案不会从向量中生成元素对。除非这些恰好是1:nI,然后使用形式为1:n的向量@prgao。我觉得这很清楚。但你是对的,最好把它说清楚。更正。仍有一些拼写问题需要解决,因为它需要2个输入向量,根据原始对创建情况判断,应从第一个元素中选择1个元素,从第二个元素中选择1个元素second@DennisJaheruddin嗯,我不明白你的意思。为什么是两个向量?问题是,生成向量的元素对。实际上,解决方案不会从向量生成元素对。除非这些恰好是1:nI,然后使用形式为1:n的向量@prgao。我觉得这很清楚。但你是对的,最好把它说清楚。更正。仍有一些拼写问题需要解决,因为它需要2个输入向量,根据原始对创建情况判断,应从第一个元素中选择1个元素,从第二个元素中选择1个元素second@DennisJaheruddin嗯,我不明白你的意思。为什么是两个向量?问题是生成向量的元素对