Question

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.

Was it helpful?

Solution

Use ISMEMBER:

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

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

OTHER TIPS

I had to create diff between two arrays without sorting data. I found this great option in matlab docs. Setdiff function

Here is definition of function [C,ia] = setdiff(___,setOrder) If you do not want output data sorted use 'stable' otherwise 'sorted' or without parameter.

Here was my use case.

yDataSent = setdiff(ScopeDataY, yDataBefore, 'stable')
yDataBefore = ScopeDataY;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top