MATLAB:检测并删除 2 列矩阵中的镜像对

2024-06-28

我有一个矩阵

[1 2
 3 6
 7 1
 2 1]

并想删除镜像对......即输出将是:

[1 2
 3 6
 7 1] 

or

[3 6
 7 1 
 2 1]

有没有一种简单的方法可以做到这一点?我可以想象一个复杂的 for 循环,例如(或不会删除原始对的版本..仅删除重复项):

for i=1:y
    var1=(i,1);
    var2=(i,2);
    for i=1:y
        if array(i,1)==var1 && array(i,2)==var2 | array(i,1)==var2 && array(i,2)==var1
            array(i,1:2)=[];
        end
    end 
end

thanks


这是怎么用的简单 -

A(~any(tril(squeeze(all(bsxfun(@eq,A,permute(fliplr(A),[3 2 1])),2))),2),:)

Playing code-golf https://en.wikipedia.org/wiki/Code_golf?好吧,我们开始吧——

A(~any(tril(pdist2(A,fliplr(A))==0),2),:)

如果仅处理两列矩阵,这里是simpler的版本bsxfun -

M = bsxfun(@eq,A(:,1).',A(:,2)); %//'
out = A(~any(tril(M & M.'),2),:)

样本运行 -

A =
     1     2
     3     6
     7     1
     6     5
     6     3
     2     1
     3     4
>> A(~any(tril(squeeze(all(bsxfun(@eq,A,permute(fliplr(A),[3 2 1])),2))),2),:)
ans =
     1     2
     3     6
     7     1
     6     5
     3     4
>> A(~any(tril(pdist2(A,fliplr(A))==0),2),:)
ans =
     1     2
     3     6
     7     1
     6     5
     3     4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MATLAB:检测并删除 2 列矩阵中的镜像对 的相关文章

随机推荐