finding similar rows in matrices

Hi, i have several matrices that has 3 columns each, but the number of rows is not equal. im trying to find a fast way of comparing the first two columns in all 3 matrices and to find the rows (column 1 and 2) that are identical in all 3 of them. i've tried "ismember", it works ok but when dealing with lots of matrices its too slow.
can anyone recomend a different function? thank you for your help.

3 个评论

Can you post an example of your code, as well as some sample input/output that you expect? This will save a lot of guesswork on our part.
a=[1,2,3;
1,3,5;
2,5,7];
b=[1,2,6;
1,4,8;
2,5,8];
c=[1,4,7;
1,5,3;
2,5,9];
those three matrices have only one row (column 1 and 2) in common. the third one ...... thats basicaly what i want, the index of the common rows in all matrices.
thankyou sir i have one doubt in my coding.how to remove a duplicate matrices in the set of all matrices.

请先登录,再进行评论。

 采纳的回答

I think your best bet for something fast is the intersect() command.
doc intersect
for details. Be sure to use the "rows" argument.
Here is some code that I believe will do what you want, but I have to admit I did not test much:
a=[1,2,3;
1,3,5;
2,5,7];
b=[1,2,6;
1,4,8;
2,5,8];
c=[1,4,7;
1,5,3;
2,5,9];
[ab,ia,ib] = intersect(a(:,1:2),b(:,1:2),'rows')
[abc,iab,ic] = intersect(ab(:,1:2),c(:,1:2),'rows')
a_row_idx = ia(iab)
b_row_idx = ib(iab)
c_row_idx = ic

更多回答(2 个)

INTERSECT or ISMEMBER come into mind:
tf = ismember(C, A(ismember(A,B,'rows')), 'rows')
result = C(tf,:)
Dany
Dany 2014-2-11

0 个投票

thank you. i will try the "intersect" command.
is it possible to put several commads of "ismember" one into another? can those functions work on several matrices at once? more then two?

类别

在 帮助中心 和 File Exchange 中查找有关 Matrix Indexing 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by