【问题标题】:delete repeat elements matlab [duplicate]删除重复元素matlab [重复]
【发布时间】:2013-07-05 23:28:28
【问题描述】:

我有两个矩阵:

输入:

A = [1,1;2,4;3,9;4,16;5,25];
B = [3,9;4,16;6,26;7,49;5,25];

输出:

A = [1,1;2,4;3,9;4,16;5,25];
B = [6,26;7,49];

我想从B 中删除A 的重复元素,反之亦然。以下是我目前的方法,虽然正确,但速度很慢。

clear all;
clc;

A = [1,1;2,4;3,9;4,16;5,25];
B = [3,9;4,16;6,26;7,49;5,25];

C = B; 
L = 0;
for ii = 1:length(A)
    for jj = 1:length(B)
        if A(ii,1)==B(jj,1) && A(ii,2)==B(jj,2)

            C(jj,1)=0; 
            C(jj,2)=0; 

            L = L+1;
        end       
    end    
end
L
[A B C]


B = zeros(L-1,2);
L = 1;
for ii = 1:length(C)
    if C(ii,1)~=0 && C(ii,2)~=0

        B(L,1) = C(ii,1);
        B(L,2)=  C(ii,2);

        L = L+1;
    end
end
B

我可以使用find 命令吗?或使用intersect 命令? 感谢大家的帮助。对于具有单列或单行的矩阵,我可以使用find 命令或intersect 命令来完成。

【问题讨论】:

  • 我明白了。是的,这正是我想要的。

标签: matlab find intersect


【解决方案1】:
>> B(~ismember(B, A, 'rows'), :)

ans =

 6    26
 7    49

【讨论】:

  • 这不会保留行。你应该改用B(~ismember(B, A, 'rows'), :)
  • 啊好的,谢谢 Eitan T。您要编辑答案吗?
【解决方案2】:

尝试intersectsetdiff 来实现这个目标

【讨论】:

    【解决方案3】:

    但是,您使用intersect(A,B) 为单个列执行此操作,您应该能够使用intersect(A,B,'rows') 为多个列执行此操作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-02
      • 2011-02-18
      • 1970-01-01
      • 1970-01-01
      • 2013-05-20
      • 2020-01-19
      • 2015-01-05
      相关资源
      最近更新 更多