3

我感谢有关如何矢量化以下 for 循环(matlab)的建议:

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

向量化是指使用矩阵运算而不是 for 循环。我听说矢量化通常比 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
4

1 回答 1

3

基本上你想总结和之间的所有距离newTS(m+i*k)newTS(m+(i-1)*k)所以你可以做这样的事情

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

我同意你的观点,根据我使用 Matlab 的经验,矩阵运算通常比for循环快得多。我尽量避免它们。

编辑:我认为更换内i循环对你来说应该足够好了。也许您可以m通过重塑newTS为矩阵来替换循环,但由于lastieach 不同m,因此在您的情况下可能会很棘手。

于 2013-03-05T07:26:26.850 回答