Como excluo a interseção dos conjuntos A e B de A sem classificar no Matlab?
-
28-09-2019 - |
Pergunta
Duas matrizes, A e B:
A = [1 2 3
9 7 5
4 9 4
1 4 7]
B = [1 2 3
1 4 7]
Todas as linhas da matriz B são membros da Matrix A. Desejo excluir as linhas comuns de A e B de A sem classificar.
Eu tentei setDiff (), mas isso classifica a saída.
Para o meu problema específico (é importante o meu problema (coordenadas atômicas em estruturas de proteínas) que mantém a integridade ordenada das linhas.
Solução
Usar ISMEMBER:
%# find rows in A that are also in B
commonRows = ismember(A,B,'rows');
%# remove those rows
A(commonRows,:) = [];
Outras dicas
Eu tive que criar diff entre duas matrizes sem classificar dados. Encontrei essa ótima opção nos documentos do Matlab. Função setDiff
Aqui está a definição de função [C,ia] = setdiff(___,setOrder)
Se você não deseja que os dados de saída classificados, use 'estável', caso contrário 'classificados' ou sem parâmetro.
Aqui estava o meu caso de uso.
yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
yDataBefore = ScopeDataY;
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow