嵌套循环和条件语句(Matlab)

use*_*251 0 matlab conditional loops nested

如果你有一个随机矩阵,例如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)
Run Code Online (Sandbox Code Playgroud)

第二个阵列:

B(1,j) = (4 5 6 7 8)
Run Code Online (Sandbox Code Playgroud)

如果只有当B(1,j)的值大于A的某个colomn值时,才需要将B的值赋值给A?

例如,B(1,1)= 4并且在A的第一个colomn中它大于A(1,1),A(3,1)和A(5,1),所以这些必须被4替换在第二个colomn中,没有什么需要更换,等等.

谢谢!

bea*_*ker 5

您可以在没有任何显式循环的情况下执行此操作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);
Run Code Online (Sandbox Code Playgroud)

结果:

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
Run Code Online (Sandbox Code Playgroud)

在MATLAB的后续版本(2016b及更高版本)中,您甚至可以省略bsxfun并获得相同的结果.

A = min(A,B);
Run Code Online (Sandbox Code Playgroud)