Search code examples
sortingmatlabset-difference

How do I delete the intersection of sets A and B from A without sorting in MATLAB?


Two matrices, A and B:

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

B = [1 2 3
     1 4 7]

All rows of matrix B are members of matrix A. I wish to delete the common rows of A and B from A without sorting.

I have tried setdiff() but this sorts the output.

For my particular problem (atomic coordinates in protein structures) maintaining the ordered integrity of the rows is important.


Solution

  • Use ISMEMBER:

    %# find rows in A that are also in B
    commonRows = ismember(A,B,'rows');
    
    %# remove those rows
    A(commonRows,:) = [];