Matlab 2不同矩阵的值匹配。现在更改同一行中的另一个值
所以我有两个矩阵,我想替换矩阵a第2列中的一个值,如果矩阵a第1列中的值等于矩阵B第一列中的值,这个替换值就是矩阵B第2列中的值 所以:A=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在每个循环上改变大小,这可以很
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
那么你做了什么来解决这个难题呢?堆栈溢出不是发布需求并让别人免费编写代码的地方。如果你继续读下去,你会注意到自己解决问题的努力需要明显地投入到问题中。