Come è possibile eliminare l'intersezione di insiemi A e B da A senza ordinare in MATLAB?

StackOverflow https://stackoverflow.com/questions/3467670

  •  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.

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top