【问题标题】:Nested loop and conditional statement (Matlab)嵌套循环和条件语句(Matlab)
【发布时间】:2017-12-20 01:03:54
【问题描述】:

如果您有一个随机矩阵,例如 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。在第二列中,不需要替换任何内容,等等。

已经谢谢了!

【问题讨论】:

    标签: matlab loops nested conditional


    【解决方案1】:

    您可以使用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);
    

    【讨论】:

      【解决方案2】:

      Matlab“查找”可能对您有用。

      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)
      

      【讨论】:

        猜你喜欢
        • 2015-10-01
        • 1970-01-01
        • 2015-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多