我正在运行一个大循环来逐点分析数据,但现在我需要运行我想要忽略的平均值。
%In-Flight Tag Averaging Center%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%HPOT DP%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if PWRLVLCMDGPC(i) == 104 && time(i) > 86200
if HPOTDP(i) ~= -1 && perf_case_c == -1
hpotp_if_c(i) = HPOTDP(i) - hpot_pcp_c(i);
fun = @(x) mean(x(:));
hpotp_rep_c = nlfilter( hpotp_if_c,[1 20],fun);
end
end
原样,代码会卡在nlfilter
中。任何人都可以看到这个方法吗?
最终意图是对hpotp_if_c进行计算的滑动(移动)平均值,因此平均值(1:20)将是向量hpotp_rep_c的第一个点,平均值(2:21)将是第二个等等。
我只想再次注意,所有这些操作都需要在更大的for循环中完成,所以这些函数不能真正起作用
答案 0 :(得分:1)
JIT并不真正支持nlfilter
:
fun = @(x) mean(x(:))
a=rand(1,7000);
feature accel on
tic
nlfilter(a,[1,20],fun);
toc
feature accel off
tic
nlfilter(a,[1,20],fun);
toc
输出
fun =
@(x)mean(x(:))
Elapsed time is 0.764700 seconds.
Elapsed time is 0.914575 seconds.
在1到7000循环中调用将需要大约1.5小时来计算:(
你可以用你喜欢的东西来渲染你的整个for
循环(强调“类似”,不运行此代码,因此它可能不是可复制粘贴的)
A=(PWRLVLCMDGPC== 104).*(time > 86200).*(HPOTDP ~= -1).*(perf_case_c == -1);
hpotp_if_c(A) = HPOTDP(A) - hpot_pcp_c(A);
hpotp_rep_c = nlfilter( hpotp_if_c,[1 20],fun);
毕竟,您的旧循环会一遍又一遍地覆盖hpotp_rep_c
的所有值。