Comment puis-je supprimer l'intersection des ensembles A et B de A sans tri Matlab?
-
28-09-2019 - |
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.
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;