3

我有一个大数组 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 中的每个元素的 A 需要非常长的时间。我希望有更快的方法。

4

1 回答 1

3

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

C = A;
[tf, loc] = ismember(B(:, 1:2), A(:, 1:2), 'rows');
C(loc, 5:6) = B(:, 3:4);
于 2013-05-06T08:06:54.083 回答