Matlab 代码优化(嵌套循环)
我正在运行一个matlab代码,其中我必须运行嵌套for循环。我已经做了预分配。我认为矢量化在我的情况下是不可能的。此外,我不熟悉编写mex文件。你会建议我在速度方面优化我的代码吗?您可以在下面找到代码。随着tuple_rs和tuple_cs值的增加,大约需要3-4秒Matlab 代码优化(嵌套循环),matlab,for-loop,optimization,Matlab,For Loop,Optimization,我正在运行一个matlab代码,其中我必须运行嵌套for循环。我已经做了预分配。我认为矢量化在我的情况下是不可能的。此外,我不熟悉编写mex文件。你会建议我在速度方面优化我的代码吗?您可以在下面找到代码。随着tuple_rs和tuple_cs值的增加,大约需要3-4秒 for i=1:tuple_rs mu=target.x{tID,tm-N+1}; % Track at T(k-S+1) sig=target.c{tID,tm-N+1}; for
for i=1:tuple_rs
mu=target.x{tID,tm-N+1}; % Track at T(k-S+1)
sig=target.c{tID,tm-N+1};
for n=1:tuple_cs
if a(i,n)~=0 % Non-Dummy Measurement
v=bh{tm-N+n+1}(a(i,n),:)'; % Measurement
mu = ml.FCV * mu;
sig = ml.FCV * sig * ml.FCV'+ ml.Q;
S = ml.H*sig*ml.H'+ml.Rsd;
innv = mu(1:2) - v(1:2);
eucdis=sqrt(innv * innv'); % Euclidean Distance
% Eliminate measurements outside of the gate
if eucdis > target.Kn_Thresh/2
phi_n(tID,i)=10^-900; phi_o(tID,i)=1;
continue;
end
Sm=S(1:2,1:2); iv=v(1:2)-mu(1:2);
lhood=(2*pi)^-1*det(Sm)^-0.5*exp(-0.5*(iv)'*(Sm\iv));% Cost
Msd=target.Sp_Thresh - cf{tm-N+n+1}(a(i,n)); % Norm. Fs
phi_o(tID,i)=phi_o(tID,i)*vol; % Dummy Track
phi_n(tID,i)=phi_n(tID,i)*PD*lhood*PM(n)*(Msd/SumSd(n)); % Nondummy T
z_mu=[mu(1);mu(2);mu(3);mu(4)]; % Predicted Measurement
S = ml.H*sig*ml.H'+ml.R;
gain = (sig * ml.H')/S; % Gain
sig = sig - gain*ml.H*sig; % Covariance estimation
mu = mu + gain*(v-z_mu); % Mean estimation
else phi_n(tID,i)= phi_n(tID,i)*(1-PD)*PL(n); % Dummy Measurement
phi_o(tID,i)=phi_o(tID,i)*1;
mu = ml.FCV * mu;
sig = ml.FCV * sig * ml.FCV'+ ml.Q;
end
end
end
使用
profile
识别慢行。我做到了。问题是每一条线花费的时间差不多。正如我所说,for循环的主体并不昂贵,但随着迭代次数的增加,它会以指数形式变慢。请尝试尽可能多地删除struct
s和cell
s的使用,它们有时可能效率低下。同时检查循环内部是否有任何东西在增长(使用更多内存)10^-900
是怎么回事?