Matlab 2不同矩阵的值匹配。现在更改同一行中的另一个值

Matlab 2不同矩阵的值匹配。现在更改同一行中的另一个值,matlab,Matlab,所以我有两个矩阵,我想替换矩阵a第2列中的一个值,如果矩阵a第1列中的值等于矩阵B第一列中的值,这个替换值就是矩阵B第2列中的值 所以:A= 1 0 2 Inf 3 Inf 4 Inf 5 Inf 6 Inf 7 Inf 8 Inf 9 Inf 10 Inf B= 5 563,4 7 327,9 我想: A= 我正在尝试(如果可能的话)避免使用for循环,因为它们在大多数情况下都是低效的。 此外,我可能应该提到矩阵B在每个循环上改变大小,这可以很

所以我有两个矩阵,我想替换矩阵a第2列中的一个值,如果矩阵a第1列中的值等于矩阵B第一列中的值,这个替换值就是矩阵B第2列中的值

所以:A=

1   0
2   Inf
3   Inf
4   Inf
5   Inf
6   Inf
7   Inf
8   Inf
9   Inf
10  Inf
B=

5   563,4
7   327,9
我想: A=

我正在尝试(如果可能的话)避免使用for循环,因为它们在大多数情况下都是低效的。 此外,我可能应该提到矩阵B在每个循环上改变大小,这可以很容易地实现:

A = [
  1   0
  2   Inf
  3   Inf
  4   Inf
  5   Inf
  6   Inf
  7   Inf
  8   Inf
  9   Inf
  10  Inf
];

B = [
  5   563.4
  7   327.9
];

% Create a logical indexing for the values of
% the first column of A that are present in
% the first column of B...
idx = ismember(A(:,1),B(:,1));

% Replace the values of the second column of A
% with the values of the second column of B
% for the indices defined above...
A(idx,2) = B(:,2);
输出:

A =
     1         0
     2       Inf
     3       Inf
     4       Inf
     5     563.4
     6       Inf
     7     327.9
     8       Inf
     9       Inf
    10       Inf
A =
     1         0
     2       Inf
     3       Inf
     4       Inf
     5     233.4
     6       Inf
     7     327.9
     8       Inf
     9       Inf
    10       Inf
另一方面,在截取的代码中执行的计算也可以转换为一行,如下所示:

A(ismember(A(:,1),B(:,1)),2) = B(:,2);
如果只想替换
A
中等于
Inf
的值,则需要进一步的步骤。必须通过逻辑运算符
将另一个条件应用于索引,以便仅匹配正确的值。必须创建指向
A
B
索引,以便应用相同的条件:

A = [
  1   0
  2   Inf
  3   Inf
  4   Inf
  5   233.4
  6   Inf
  7   Inf
  8   Inf
  9   Inf
  10  Inf
];

B = [
  5   563.4
  7   327.9
];

A_idx = ismember(A(:,1),B(:,1)) & (A(:,2) == Inf);
B_idx = (A(ismember(B(:,1),A(:,1)),2) == Inf);
A(A_idx,2) = B(B_idx,2);
输出:

A =
     1         0
     2       Inf
     3       Inf
     4       Inf
     5     563.4
     6       Inf
     7     327.9
     8       Inf
     9       Inf
    10       Inf
A =
     1         0
     2       Inf
     3       Inf
     4       Inf
     5     233.4
     6       Inf
     7     327.9
     8       Inf
     9       Inf
    10       Inf
那么你做了什么来解决这个难题呢?堆栈溢出不是发布需求并让别人免费编写代码的地方。如果你继续读下去,你会注意到自己解决问题的努力需要明显地投入到问题中。