2013-05-06 36 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);