Question

Deux matrices, A et B:

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 trie la sortie.

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

Était-ce utile?

La solution

Utilisez IsMember :

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

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

Autres conseils

Je devais créer diff entre deux tableaux sans tri des données. J'ai trouvé cette grande option dans Matlab docs. Setdiff fonction

Voici la définition de la fonction [C,ia] = setdiff(___,setOrder) Si vous ne voulez pas les données de sortie triées utilisation « stable » autrement « trié » ou sans paramètre.

Voici ce fut mon cas d'utilisation.

yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
yDataBefore = ScopeDataY;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top