¿Cómo se elimina la intersección de los conjuntos A y B de A sin clasificar en MATLAB?
-
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.
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