6

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.

gnovice
  • 125,304
  • 15
  • 256
  • 359
Darren J. Fitzpatrick
  • 7,159
  • 14
  • 45
  • 49

2 Answers2

10

Use ISMEMBER:

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

%# remove those rows
A(commonRows,:) = [];
Jonas
  • 74,690
  • 10
  • 137
  • 177
1

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;