【发布时间】:2013-03-05 07:16:22
【问题描述】:
感谢有关如何矢量化以下 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
【问题讨论】:
-
您应该指定变量“m”和“k”的大小以及“newTS()”是否也适用于向量。否则这个问题不能很好地回答。
-
还指定
newTS是一个函数还是一个矩阵,您要从中提取元素。如果newTS是一个函数,则必须先对其进行矢量化,然后才能完全优化此循环。 -
@H.Muster 我觉得 m 和 k 的大小在我刚刚进行的编辑之后应该清楚了。
-
@user57368 newTS 是列向量,而不是函数。
-
另外,我认为代码行
AvgL(j)=mean(L(:,j));应该在m循环之外。请编辑它。我的编辑被拒绝了。
标签: matlab for-loop vectorization