Another data manipulation question,need some help!

Asked by Xiao Tang on 23 Jun 2012
Latest activity Commented on by Xiao Tang on 24 Jun 2012

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!

0 Comments

Xiao Tang

Products

No products are associated with this question.

2 Answers

Answer by Walter Roberson on 23 Jun 2012
Accepted answer
[tf, idx] = ismember( A(:,1), B(:,1) );
A(tf,:)= B(idx(tf), :);

1 Comment

Xiao Tang on 23 Jun 2012

Thanks @Walter Roberson. The ismember function and logical index should be more efficient than my loop!

Walter Roberson
Answer by Andrei Bobrov on 23 Jun 2012
[b b b] = unique(A(:,1));
C = B(b,:)

1 Comment

Xiao Tang on 24 Jun 2012

What can I say, man. You gave me great answers to all my questions.Thanks a million!

Andrei Bobrov

Contact us