我有一个超过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]
我该怎么做?
答案 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