0

I have two matrices:

Input:

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

Output:

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

I want to delete the repeating elements of A from B or vice-versa. Below is my current approach, but although correct, it is quite slow.

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

Can I do it by using find command? or by using the intersect command ? Thank you all for your help. For an matrix having a single column or a single row I have been able to do it by using the find command or the intersect command.

Rody Oldenhuis
  • 37,726
  • 7
  • 50
  • 96
roni
  • 1,443
  • 3
  • 28
  • 49

3 Answers3

2
>> B(~ismember(B, A, 'rows'), :)

ans =

 6    26
 7    49
Kyler Brown
  • 1,106
  • 7
  • 18
1

try intersect and setdiff to achive this goal

Shai
  • 111,146
  • 38
  • 238
  • 371
1

However you did it for a single column using intersect(A,B), you should be able to do it for multiple columns using intersect(A,B,'rows')

Dan
  • 45,079
  • 17
  • 88
  • 157