我有一个大型数组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中的每个元素进行迭代需要非常长的时间。我希望有更快的方法。
答案 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);