我很感激有关如何对以下for循环(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
答案 0 :(得分: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
循环替换为矩阵,但由于每个lasti
的{{1}}不同,所以在你的情况下可能会很棘手。