忽略循环中的一行代码

时间:2013-07-24 14:13:33

标签: matlab loops

我正在运行一个大循环来逐点分析数据,但现在我需要运行我想要忽略的平均值。

%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循环中完成,所以这些函数不能真正起作用

1 个答案:

答案 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的所有值。