如何在两个连续值之间的某个最小上升过滤单调递增矢量?

时间:2014-09-14 10:13:01

标签: matlab vector

我有一个超过1000行的向量,如下所示: N = [13120; 13157; 13200; 15124; 17128; 19108; 19130; 21112; 23096: ... ]

我在这里遇到的问题是我需要找到(并提取)仅由 2000 + -20 上升的值,因此我创建了一个向量M = [13120; 15120; 17120; 19120; 21120; 23120]。在这里,我认为我没有正确的解决方案,因为,例如,在1000次迭代后,我的新矢量中的数字将不再匹配。我需要在大约10次迭代后纠正该值,然后计算一个新的向量,该向量在2000年的步骤中上升。

最后,我需要提取正确的行并删除其他行,如:

NewVector = [13120; 15124; 17128; 19130; 21112; 23096] 

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我认为你不可能避免使用while循环。

N = [13120; 13157; 13200; 15124; 17128; 19108; 19130; 21112; 23096]

%// parameters
x = 20;
X = 2000;

%// initialize
Z(1) = N(1);
ii = 1;

while (Z(ii) +X - x) < N(end)  %// check if last value of new vector is still 
                               %// smaller than biggest value of initial vector
    Z(ii+1) = N( find(N > (Z(ii) + X - x) ,1 ) );  %// find next biggest
                                                   %// with minimum rise of
                                                   %// X - x              
    ii = ii+1;                                     %// increase counter
end

给出:

Z' =

       13120
       15124
       17128
       19130
       21112
       23096

到目前为止还没有preallocation,我不知道你的情况有多快。要提高性能,您可以添加:

%// initialize
Z = zeros(numel(N),1);    %//preallocate with largest possible vector

...

while ...
      ...
end

Z = Z( 1:ii );            %//remove remaining zero values