Matlab:按标识符更新数组中的元素

时间:2013-05-06 07:57:32

标签: arrays matlab matrix identifier

我有一个大型数组A,其中包含约500,000行格式

[ id1  id2  value1  value2  zero  zero ]

和另一个较小的数组B(~20,000行),其行包含一些来自A

的标识符
[ id1  id2  value3  value4 ]

B中的所有ID对都存在于A.我希望在id1和id2的值分别匹配的位置将B的值更新为A.新数组的(行)顺序可能是任意的。

一个例子:

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

使用for循环对B中的每个元素进行迭代需要非常长的时间。我希望有更快的方法。

1 个答案:

答案 0 :(得分:3)

您可以使用ismember获取“id1”和“id2”匹配的行的索引,然后使用B中的相应值更新最后两列:

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