compare two matrix and keep only the elements in common

Hi, I am a beginner in matlab, and I need to compare to matrix and then keep only the elements present in both matrix in my 1st matrix (s(1).r). For this I compare the first column of each matrix. I've read the documentation and tried to write a code with ismember:
Lia = ismember(s(1).r(:,1), res_select(:,1)) ;
for ind = length(s(1).r)-1 : -1 : 1
if Lia(ind)==0
s(1).r(ind,:)=[];
end
end
I think something is wrong, because I am supposed to find 1987 elements in common and I found 1988...so close! Where is my mistake, or is there an easier way to do this? Thank you!! Aude

 채택된 답변

KSSV
KSSV 2016년 11월 21일
편집: KSSV 2016년 11월 21일

1 개 추천

We don't have data to check your code. Note that, You need not to run a loop...simply use, s(1).r(Lia,:) to get the common elements.
As you have two sets and you want to pick the common elements, you can find intersection of both the arrays. Intersection gives you common elements. doc intersect.
Sometimes depending on the floating point numbers, ismember/ intersect may not work. That case, you need to fix a tolerance value and use ismemebrtol. doc ismembertol.

댓글 수: 3

Thank you very much KSSV!
I used intersect:
[Cc,ia,ib] = intersect(res_select(:,1),s(1).r(:,1)) ;
and then I tried to remove the non-in common values:
s(1).r(ib,:)=[];
But it is not working, at the end I find 48 values and I should find 1987. Do you know another way to remove the values I don't want to keep after intersect?
Thank you for your reply!
You need not to remove the elements, Cc itself will have all common elements, what is length(Cc)?
Ah yes you are right, length (Cc) is 1987! thank you very much for your help!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터File Exchange에서 Logical에 대해 자세히 알아보기

질문:

2016년 11월 21일

댓글:

2016년 11월 22일

Community Treasure Hunt

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

Start Hunting!

Translated by