Need to match Data

1 view (last 30 days)
Johannes
Johannes on 8 Oct 2012
Hello,
I like to match the entries in column 2 of matrix A to the reference numbers of B. I'm going to do that for large data sets. Code like follows does exactly what I want but will be to slow. Is there an intelligent function/way available to do that? Thanks a lot!
A = [2 3 5 7; 23 54 76 86]';
B = [1:7]';
j=1;
for i = 1:7
if B(i,1) == A(j,1)
B(i,2) = A(j,2);
j = j+1;
end
end
result: B =
1 0
2 23
3 54
4 0
5 76
6 0
7 86

Accepted Answer

Matt Fig
Matt Fig on 8 Oct 2012
B(A(:,1),2) = A(:,2)
  2 Comments
Matt Fig
Matt Fig on 8 Oct 2012
Johannes comments:
"Thank you. That was a bad example, my mistake.
What would be the solution for vectors like that:
A = [7 3 5 9; 23 54 76 86]';
B = [3:15]';"
Matt Fig
Matt Fig on 8 Oct 2012
Edited: Matt Fig on 8 Oct 2012
In that case:
A = [7 3 5 9; 23 54 76 86]';
B = [3:15]';
As = sortrows(A,1);
idx = ismember(B,As(:,1));
B(idx,2) = As(:,2)

Sign in to comment.

More Answers (2)

Andrei Bobrov
Andrei Bobrov on 8 Oct 2012
Edited: Andrei Bobrov on 8 Oct 2012
A = [7 3 5 9; 23 54 76 86]';
B = [3:15]';
[a,b] = ismember(B,A(:,1));
B(a,2) = A(b(a),2);

Johannes
Johannes on 9 Oct 2012
thank you all! My final solution is the following:
B(ismember(A),2)=A(ismember(A,B),2);
Works perfect and very fast.
Thank you again for your help.
Best, Johannes

Products

Community Treasure Hunt

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

Start Hunting!