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.

Foi útil?

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
scroll top