我有一个带R行和C列的MATLAB数组,其中第一列包含数字标识符,不一定是一组有序数字。
现在,我加载第二个数组,其中包含R'行和2列,其中第一列包含标识符,而第二列包含数字数据。如何有效地将对应于标识符I的数据写入原始数组的对应行(也由标识符I标识)的附加列中?
当然,一个简单的解决方案是for循环和if-else或switch-case条件的构造,但我想必须有一个更优雅的矢量化方法来实现它。
进一步说明问题:
A1 = [ %first array
1, 0.3
2, 0.9
3, 12];
A2 = [ %second array
1, 0.5
3, 9];
G = [ %goal
1, 0.3, 0.5
2, 0.9, NaN
3, 12, 9];
答案 0 :(得分:1)
您可以使用ismember
来实现这一目标:
G = A1; % define G as A1
G(:,end+1) = NaN; % extend with a column of NaNs
[is, ind] = ismember(A2(:,1), A1(:,1)); % matchings of first column of A2 in A1,
% and their indices
G(ind(is),end) = A2(is,2); % fill matched rows with values second column of A2
请注意:
A2
中A1
中的某个标识符不存在,则此功能也可用。A2
具有相同的标识符,则与 last 对应的值将写入G
。