在matlab中从大型数组的连续向​​量之间跳过/忽略最大差异大于1的值

时间:2017-11-08 12:48:19

标签: matlab

给出以下数组:

multipart/mixed

如何快速重新创建一个保持相同顺序的数组,但跳过连续向量之间的最大差异大于1的值?

期望的结果是:

[158 159 159 160 162 163 161 162 162 168 169 163 164 164 165 171 177 178 166 167]

3 个答案:

答案 0 :(得分:0)

这是递归解决方案:

a= [158 159 159 160 162 163 161 162 162 168 169 163 164 164 165 171 177 178 166 167];
ii=1;
while true
    l= length(a);
    csa = circshift(a,1);
    csa(1)=NaN;
    a( a - csa >1 ) = [];

    if l == length(a)
        break;
    end
end
disp(a)

a是由算法修改的输入数组。 如果你运行它,结果是:

a = [158   159   159   160   161   162   162   163   164   164   165   166   167]

根据需要。

答案 1 :(得分:0)

A= [158 159 159 160 162 163 161 162 162 168 169 163 164 164 165 171 177 178 166 167];

for i=2:length(A)
    if i>length(A)
        break
    end
    while abs(A(i)-A(i-1))>1
        A(i) = [];
    end
end
  • 起始length(A)为20,但会缩短。因此,如果需要,我必须检查条件和break循环。
  • 我使用while代替if来检查后续元素。例如,我检查160和162之间的差异,然后删除162。然后我需要检查160和163之间的区别。

答案 2 :(得分:0)

您可以将difflogical indexing一起使用:

a = [158 159 159 160 162 163 161 162 162 168 169 163 164 164 165 171 177 178 166 167];

test = [false diff(a)>1];
while any(test)
    a = a(~test);
    test = [false diff(a)>1];
end

返回:

a =

   158   159   159   160   161   162   162   163   164   164   165   166   167
相关问题