繁体   English   中英

嵌套循环和条件语句(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“查找”可能对您有用。

https://www.mathworks.com/help/matlab/matlab_prog/find-array-elements-that-meet-a-condition.html

如果您不关心速度或效率,也可以设置两个嵌套的for循环,并使用条件(即if)语句比较A和B的值。

如果只对与B的列进行比较感兴趣,则可以在内部循环中使用外部循环的增量。

for i,...
 for j,...
   if B(1,i) > A(j,i)
       A(j,i)=B(i,j)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM