我很感激关于如何将以下for loop(matlab)矢量化的建议:

    summ=0;
    for i=1:lasti
         summ=summ+abs(newTS(m+i*k)-newTS(m+(i-1)*k));
    end

我的意思是用矩阵运算代替for循环我听说向量化通常比循环更有效和更快。
编辑:实际上我真正想矢量化的是下面我把它放在里面,以防有个勇敢的人想试一试。。。
   for j=1:length(kvec)
       k=kvec(j);
       for m=1:k
           lasti=floor((N-m)/k);
           Nfact=(N-1)/(lasti*k);
           summ=0;
           for i=1:lasti
                summ=summ+abs(newTS(m+i*k)-newTS(m+(i-1)*k));
           end
           L(m,j)=(summ*Nfact)/k;
           %Avg over m
           AvgL(j)=mean(L(:,j));
        end
    end

最佳答案

基本上你想把newTS(m+i*k)newTS(m+(i-1)*k)之间的距离加起来,这样你就可以做这样的事情

summ = sum(abs(diff(newTS(m:k:m+lasti*k))))

我同意你的看法,根据我对Matlab的经验,矩阵运算通常比for循环快得多我尽量避开他们。
编辑:我认为替换内部i循环对您来说应该足够好了也许您可以通过将m重塑为一个矩阵来替换newTS循环,但是由于每个lastim是不同的,所以在您的情况下可能会很棘手。

10-04 23:32