How do I delete the intersection of sets A and B f

2019-02-22 04:03发布

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.

2条回答
放荡不羁爱自由
2楼-- · 2019-02-22 04:30

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;
查看更多
冷血范
3楼-- · 2019-02-22 04:36

Use ISMEMBER:

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

%# remove those rows
A(commonRows,:) = [];
查看更多
登录 后发表回答