Azzera filtri
Azzera filtri

Another data manipulation question,need some help!

2 visualizzazioni (ultimi 30 giorni)
There are two matrix A and B.
A =
15 4534 0 31
10 0 346 0
10 342 124 11
20 345 0 13
25 73 311 15
15 0 0 14
10 0 153 16
15 532 129 19
20 153 0 0
B =
10 4324 13976 7645
15 7675 3821 14510
20 13198 0 3874
25 4321 4321 4321
According to the first column, replace the rest columns of A with B.
The result should be:
C =
15 7675 3821 14510
10 4324 13976 7645
10 4324 13976 7645
20 13198 0 3874
25 4321 4321 4321
15 7675 3821 14510
10 4324 13976 7645
15 7675 3821 14510
20 13198 0 3874
I used 2 loops(shown as follows) to get the result. But I was wondering if there is an easier way.
C(:,1) = A(:,1);
for i = 1: length(A)
for n = 1:length(B)
if A(i,1) ==B(n,1)
C(i,2:4) = B(n,2:4);
end
end
end
Any suggestion is welcomed!

Risposta accettata

Walter Roberson
Walter Roberson il 23 Giu 2012
[tf, idx] = ismember( A(:,1), B(:,1) );
A(tf,:)= B(idx(tf), :);
  1 Commento
Xiao Tang
Xiao Tang il 23 Giu 2012
Thanks @Walter Roberson. The ismember function and logical index should be more efficient than my loop!

Accedi per commentare.

Più risposte (1)

Andrei Bobrov
Andrei Bobrov il 23 Giu 2012
[b b b] = unique(A(:,1));
C = B(b,:)
  1 Commento
Xiao Tang
Xiao Tang il 24 Giu 2012
What can I say, man. You gave me great answers to all my questions.Thanks a million!

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by