我需要更换什么来改善阿尔法的性能?

时间:2016-03-10 14:11:04

标签: arrays matlab

我是Matlab的新手,但我正在努力。 我有以下代码:

for t = 1:size(data,2)
  b = data(t)/avevalue;
  if b >= 1
     cat1 = [repmat((avevalue),floor(b),1)',mod(data(t),15)];
  else
     cat1 = data(t);
  end
  modified = [modified,cat1];
end

的答案
data=[16 18 16 25 17 7 15];
avevalue=15;

    15     1    15     3    15     1    15    10    15     2     7    15     0

但是当我的阵列超过10000个元素时,它的工作非常非常缓慢(例如,100000近3分钟)。我怎样才能提高它的速度?

1 个答案:

答案 0 :(得分:2)

缓慢有两个主要原因:

  1. 您正在使用循环。
  2. 每次迭代时输出数组都在增长。
  3. 您可以通过尝试以下方法来改善运行时间:

    %auxilliary array
    divSumArray = ceil((data+1)/avevalue);
    
    %defines output array
    newArr = ones(1,sum(divSumArray))*avevalue;
    
    %calculates modulo
    moduloDataIndices = cumsum(divSumArray);
    
    %assigning modulo in proper location
    newArr(moduloDataIndices) = mod(data,avevalue);
    

    最终结果

    15     1    15     3    15     1    15    10    15     2     7    15     0
    

    时间测量

    我测量了以下输入的运行时间:

    n = 30000;
    data = randi([0 99],n,1);
    avevalue=15;
    
    原来的算法:

    Elapsed time is 11.783951 seconds.
    

    优化算法:

    Elapsed time is 0.007728 seconds.