2013-05-06 38 views
3

我有一个大的阵列A〜500.000与一些来自标识符的行的行的形式Matlab的:在阵列更新元素由标识符

[ id1 id2 value1 value2 zero zero ] 

和另一个较小的阵列B(〜20.000行)的一个

[ id1 id2 value3 value4 ] 

所有B中的ID对在A.存在我想在位置B的值更新成A,其中ID1和ID2匹配的分别值。新数组的(行)顺序可能是任意的。

一个例子:

A = 1 1 3 5 0 0 
    1 2 6 4 0 0 
    1 3 3 1 0 0 
    2 1 3 8 0 0 
    3 4 0 2 0 0 

B = 2 1 7 4 
    1 1 2 1 

应产生

C = 1 1 3 5 2 1 
    1 2 6 4 0 0 
    1 3 3 1 0 0 
    2 1 3 8 7 4 
    3 4 0 2 0 0 

迭代通过一种用于在B中的每个元件具有用于循环花费极其长。我希望有一个更快的方法。

回答

3

您可以使用ismember获得行,其中“ID1”和“ID2”的比赛,然后从B更新相应的值最后两列的索引:

C = A; 
[tf, loc] = ismember(B(:, 1:2), A(:, 1:2), 'rows'); 
C(loc, 5:6) = B(:, 3:4);