在MATLAB中输入值以更正表格单元格(根据第一列的条目)

时间:2018-05-07 14:58:33

标签: arrays matlab

我有一个带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];

1 个答案:

答案 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

请注意:

  • 如果A2A1中的某个标识符不存在,则此功能也可用。
  • 如果多行A2具有相同的标识符,则与 last 对应的值将写入G