gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 19:33:03 25 4
gpt4 key购买 nike

我有一个矩阵

[1 2
3 6
7 1
2 1]

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

[1 2
3 6
7 1]

[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

谢谢

最佳答案

这对简单性怎么样 -

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

正在播放 code-golf ?好吧,我们开始吧-

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

如果只处理两个列矩阵,这里是 bsxfun更简单版本 -

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

sample 运行-

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

关于arrays - MATLAB:检测并删除 2 列矩阵中的镜像对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34909847/

25 4 0
文章推荐: c# - 通过代码访问 Sharepoint 中的 Web 部件库
文章推荐: c# - 如何更新 app.config 文件中的值?
文章推荐: c# - (重新)使用约束类型的泛型参数而不声明它们
文章推荐: html - 如何设置