【问题标题】:How to vectorize this for loop matlab如何向量化这个for循环matlab
【发布时间】:2012-10-24 20:42:27
【问题描述】:
divisible = 0;
low = input('Start Value: ');
high = input('End Value: ');
divisor = input('Divisor: ');
mask = mod([low:high],divisor);

  for index = low:high
     if mask(index) == 0
        divisible = divisible + 1;
     end
  end

这个想法是计算没有余数的次数。

【问题讨论】:

    标签: matlab loops for-loop vectorization


    【解决方案1】:

    这是一个单行解决方案:

    %#Set the inputs
    LB = 3;
    UB = 28;
    Divisor = 3;
    
    %#A one-line solution
    Count = sum(mod((LB:UB)', Divisor) == 0);
    

    【讨论】:

      【解决方案2】:

      试试这一行而不是循环

       divisible = sum(mask(low:high)==0);
      

      【讨论】:

        【解决方案3】:

        首先,每当low > 1 时,您的例程都会给您一个错误,因为 mask 将从 1 开始并且具有 high - low + 1 个元素(并且当要求 mask(high) 时,您会得到错误)。

        其次,你自己几乎得到了答案:

        mask = mod([low:high],divisor);

        将是一个包含 0 的向量,表示相应的值可以被除数整除。如果你这样做mask == 0,你会得到一个 1 和 0(真或假)的向量。

        下一步是添加所有这些 1 和 0:

        sum(mask==0)

        这样你就消除了 for...end 循环

        【讨论】:

          猜你喜欢
          • 2014-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-12-22
          • 2023-03-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多