2013-07-08 5 views
0

I ont deux matrices:éléments répétés de suppression Matlab

entrée:

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

sortie:

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

Je souhaite supprimer les éléments répétitifs de A de B ou vice-versa. Voici mon approche actuelle, mais bien que correcte, elle est assez lente.

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 

Puis-je le faire en utilisant la commande find? ou en utilisant la commande intersect? Merci à tous pour votre aide. Pour une matrice ayant une seule colonne ou une seule ligne, j'ai pu le faire en utilisant la commande find ou la commande intersect.

+0

Je vois ça. oui c'est exactement ce que je veux. – roni

Répondre

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

ans =

6 26 
7 49 
+2

Cela ne conserve pas les lignes. Vous devriez utiliser 'B (~ ismember (B, A, 'rows'),:)' à la place. –

+0

ah OK, merci Eitan T. Voudriez-vous éditer la réponse? –

1

essayer intersect et setdiff à achive cet objectif

1

Cependant, vous l'avez fait pour une seule colonne à l'aide intersect(A,B), vous devriez être en mesure de le faire pour plusieurs colonnes en utilisant intersect(A,B,'rows')

Questions connexes