嵌套循环和条件语句(Matlab)
Nested loop and conditional statement (Matlab)
如果你有一个随机矩阵,例如 5x5:
A(i,j) = (5 4 3 2 1
4 3 2 1 0
5 4 3 2 1
4 3 2 1 0
5 4 3 2 1)
还有第二个数组:
B(1,j) = (4 5 6 7 8)
如果仅当 B(1,j) 的值大于 A 的某个列中的任何值时才需要这样做,那么我如何才能将 B 的值分配给 A?
例如,B(1,1) = 4,A的第一列大于A(1,1)、A(3,1)和A(5,1),所以这些必须替换成4,第二列不用替换,等等
已经谢谢了!
您可以使用 bsxfun
:
在没有任何显式循环的情况下执行此操作
A = [5 4 3 2 1
4 3 2 1 0
5 4 3 2 1
4 3 2 1 0
5 4 3 2 1];
B = [4 5 6 7 8];
A = bsxfun(@min,A,B);
结果:
A =
4 4 3 2 1
4 3 2 1 0
4 4 3 2 1
4 3 2 1 0
4 4 3 2 1
在更高版本的 MATLAB(2016b 及更高版本)中,您甚至可以省略 bsxfun
并获得相同的结果。
A = min(A,B);
Matlab "find" 可能对你有用。
https://www.mathworks.com/help/matlab/matlab_prog/find-array-elements-that-meet-a-condition.html
如果您不关心速度或效率,您还可以设置两个嵌套的 for 循环,其中包含一个比较 A 和 B 的值的条件(即 if)语句。
如果您只对与 B 的逐列比较感兴趣,则可以在内循环中使用外循环的增量。
for i,...
for j,...
if B(1,i) > A(j,i)
A(j,i)=B(i,j)
如果你有一个随机矩阵,例如 5x5:
A(i,j) = (5 4 3 2 1
4 3 2 1 0
5 4 3 2 1
4 3 2 1 0
5 4 3 2 1)
还有第二个数组:
B(1,j) = (4 5 6 7 8)
如果仅当 B(1,j) 的值大于 A 的某个列中的任何值时才需要这样做,那么我如何才能将 B 的值分配给 A?
例如,B(1,1) = 4,A的第一列大于A(1,1)、A(3,1)和A(5,1),所以这些必须替换成4,第二列不用替换,等等
已经谢谢了!
您可以使用 bsxfun
:
A = [5 4 3 2 1
4 3 2 1 0
5 4 3 2 1
4 3 2 1 0
5 4 3 2 1];
B = [4 5 6 7 8];
A = bsxfun(@min,A,B);
结果:
A =
4 4 3 2 1
4 3 2 1 0
4 4 3 2 1
4 3 2 1 0
4 4 3 2 1
在更高版本的 MATLAB(2016b 及更高版本)中,您甚至可以省略 bsxfun
并获得相同的结果。
A = min(A,B);
Matlab "find" 可能对你有用。
https://www.mathworks.com/help/matlab/matlab_prog/find-array-elements-that-meet-a-condition.html
如果您不关心速度或效率,您还可以设置两个嵌套的 for 循环,其中包含一个比较 A 和 B 的值的条件(即 if)语句。
如果您只对与 B 的逐列比较感兴趣,则可以在内循环中使用外循环的增量。
for i,...
for j,...
if B(1,i) > A(j,i)
A(j,i)=B(i,j)