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

时间:2017-07-14 20:37:59

标签: matlab loops nested conditional

如果您有随机矩阵,例如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某个colomn的任何值时才需要将B的值赋值给A?

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

谢谢!

2 个答案:

答案 0 :(得分: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);

结果:

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);

答案 1 :(得分:0)

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)