¿Cómo se elimina la intersección de los conjuntos A y B de A sin clasificar en MATLAB?

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

  •  28-09-2019
  •  | 
  •  

Pregunta

dos matrices, A y B:

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 tratado setdiff () pero esto ordena la salida.

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

¿Fue útil?

Solución

IsMember :

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

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

Otros consejos

tuve que crear diff entre dos conjuntos de datos sin ordenar. He encontrado esta gran opción en documentos MATLAB. Setdiff función

He aquí la definición de la función [C,ia] = setdiff(___,setOrder) Si no desea que los datos de salida ordenados uso 'estable' de otra manera 'ordenada' o sin parámetros.

Aquí fue mi caso de uso.

yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
yDataBefore = ScopeDataY;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top