Need to match Data

1 visualizzazione (ultimi 30 giorni)
Johannes
Johannes il 8 Ott 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

Risposta accettata

Matt Fig
Matt Fig il 8 Ott 2012
B(A(:,1),2) = A(:,2)
  2 Commenti
Matt Fig
Matt Fig il 8 Ott 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 il 8 Ott 2012
Modificato: Matt Fig il 8 Ott 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)

Accedi per commentare.

Più risposte (2)

Andrei Bobrov
Andrei Bobrov il 8 Ott 2012
Modificato: Andrei Bobrov il 8 Ott 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 il 9 Ott 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

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by