2010-08-12 5 views
6

dos matrices, A y B:¿Cómo elimino la intersección de los conjuntos A y B de A sin ordenar MATLAB?

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

B = [1 2 3 
    1 4 7] 

Todas las filas de la matriz B son miembros de la matriz A. Deseo eliminar las filas comunes de A y B de A sin clasificar.

He intentado con setdiff() pero esto ordena la salida.

Para mi problema particular (coordenadas atómicas en las estructuras de proteínas) es importante mantener la integridad ordenada de las filas.

Respuesta

10

Uso ISMEMBER:

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

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

I LOVE 'ismember'! ¡Me parece que lo usa en todas partes! – JudoWill

1

que tuvo que crear diff entre dos conjuntos de datos sin ordenar. Encontré esta gran opción en los documentos de Matlab. Setdiff function

Aquí está la definición de la función [C,ia] = setdiff(___,setOrder) Si no desea los datos de salida ordenados, utilice 'estable' o 'ordenado' o sin parámetro.

Aquí estaba mi caso de uso.

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

Gracias por su fácil solución –

Cuestiones relacionadas