Find equal elements between two matrices

13 views (last 30 days)
Greetings everyone. I have two matrices (x,y data) which have different size (1044x2 and 952x2). I want to find the elements (all from the first column, x data) that co-exist in them. Then I will create two new matrices where the first column will consist of those elements and the second column will consist of the y data from each former matrix that correspond to the elements mentioned. Below I have included the code that I used which resulted to only one (the last) element which is same for both. My mistake is that the variables MyMatrix3 and MyMatrix4 are not stated as matrices and so the result is what it should be expected. I am a bit confused about how to state them as matrices. Any help? Thanks in advance.
for i=1:length(MyMatrix1)
for j=1:length(MyMatrix2)
if (MyMatrix1(i,1)==MyMatrix2(j,1))
MyMatrix3=[MyMatrix1(i,1) MyMatrix1(i,2)];
MyMatrix4=[MyMatrix2(j,1) MyMatrix2(j,2)];
end
end
end
  2 Comments
dpb
dpb on 3 Jul 2016
"create two new matrices where ... the second column will consist of the y data from each former matrix that correspond to the elements mentioned."
Huh??? What does this mean, precisely? Give a short example dataset with the input, desired output, and rules by which the latter was obtained from the former.
I'm guessing all you really need is the outputs from
ismember(A(:,1), B(:,1))
but need an example to clarify what it is you really want. Can undoubtedly be as short as 5 or 6 elements to illustrate.
Paschalis Garouniatis
Paschalis Garouniatis on 3 Jul 2016
Edited: Paschalis Garouniatis on 3 Jul 2016
Thanks a lot for your response dpb. Let's say that I have 2 matrices: a=[4 3;1 2;10 11;5 7] and b=[1 3;10 21;6 6;3 7]. I want to create two new matrices which will have same first column and the second column will be the one that corresponds to the former matrix. So the matrices I want to create would be: c=[1 2;10 11] and d=[1 3;10 21].

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 3 Jul 2016
Edited: Andrei Bobrov on 3 Jul 2016
a=[4 3;1 2;10 11;5 7] , b=[1 3;10 21;6 6;3 7];
[lo , ii] = ismember(a(:,1),b(:,1));
out = {a(lo,:), b(ii(lo),:)};
or
ij = bsxfun(@eq,a(:,1),b(:,1)');
out = {a(any(ij,2),:), b(any(ij),:)};

More Answers (0)

Community Treasure Hunt

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

Start Hunting!