Another data manipulation question,need some help!

1 次查看(过去 30 天)
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!

采纳的回答

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

请先登录,再进行评论。

更多回答(1 个)

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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by