我很感激关于如何将以下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
循环,但是由于每个lasti
的m
是不同的,所以在您的情况下可能会很棘手。