Come è possibile eliminare l'intersezione di insiemi A e B da A senza ordinare in MATLAB?
-
28-09-2019 - |
Domanda
Due matrici A e B:
A = [1 2 3
9 7 5
4 9 4
1 4 7]
B = [1 2 3
1 4 7]
Tutte le righe di matrice B sono membri di matrice A. desidero eliminare le righe comuni di A e B da A senza ordinare.
ho cercato setdiff (), ma questo ordina l'uscita.
Per il mio problema particolare (coordinate atomiche in strutture proteiche) mantenendo l'integrità ordinata delle righe è importante.
Soluzione
IsMember :
%# find rows in A that are also in B
commonRows = ismember(A,B,'rows');
%# remove those rows
A(commonRows,:) = [];
Altri suggerimenti
ho dovuto creare diff tra due array, senza l'ordinamento dei dati. Ho trovato questo grande opzione nella documentazione MATLAB. Setdiff funzione
Ecco la definizione della funzione [C,ia] = setdiff(___,setOrder)
Se non si desidera che i dati in uscita ordinati utilizzo 'stabile' altrimenti 'ordinato' o senza parametro.
Qui è stato il mio caso d'uso.
yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
yDataBefore = ScopeDataY;