2010-08-12 6 views
6

Deux matrices, A et B:Comment supprimer l'intersection des ensembles A et B de A sans tri dans MATLAB?

A = [1 2 3 
    9 7 5 
    4 9 4 
    1 4 7] 

B = [1 2 3 
    1 4 7] 

Toutes les lignes de la matrice B sont membres de la matrice A. Je souhaite supprimer les lignes communes de A et B de A sans tri.

J'ai essayé setdiff() mais cela trie la sortie.

Pour mon problème particulier (coordonnées atomiques dans les structures protéiques), le maintien de l'intégrité ordonnée des rangées est important.

Répondre

10

Utilisation ISMEMBER:

%# find rows in A that are also in B 
commonRows = ismember(A,B,'rows'); 

%# remove those rows 
A(commonRows,:) = []; 
+3

J'AIME 'ismember'! Je trouve des utilisations pour ça partout! – JudoWill

1

je devais créer diff entre deux tableaux sans tri des données. J'ai trouvé cette excellente option dans les documents matlab. Setdiff function

Voici la définition de la fonction [C,ia] = setdiff(___,setOrder) Si vous ne voulez pas que les données de sortie soient triées, utilisez 'stable' sinon 'trié' ou sans paramètre.

Voici mon cas d'utilisation.

yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable') 
yDataBefore = ScopeDataY; 
+0

Merci pour votre solution facile –