如何为循环matlab进行矢量化

时间:2012-11-05 01:39:49

标签: matlab loops for-loop vectorization

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

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

3 个答案:

答案 0 :(得分:4)

这是一个单行解决方案:

%#Set the inputs
LB = 3;
UB = 28;
Divisor = 3;

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

答案 1 :(得分:4)

尝试这一行而不是循环

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

答案 2 :(得分:0)

首先,你的例程会在low > 1时给你一个错误,因为掩码将从1开始并且具有高 - 低+ 1元素(当要求掩码(高)时你会得到并且错误)。

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

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

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

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

sum(mask==0)

所以你省略了for ... end loop