对于一些不在输入向量中的样本,终止for循环

时间:2014-01-07 10:30:59

标签: matlab

我有一个行向量:

x=[6673 6954 6960 7130 7167 7352 7565 7600 7793 7823 7992 8113 8193 8202 8410 8649 8806 9081 9284 9462 9657 9738 9913 10126 10333 10558 10665 10946];

我想获得x的第一个值,然后是x(1)+60之后的值6954,然后是值6954 + 60,即7130(跳过所有这些值(特定值+ 60)。

我希望输出如下:

y= [6673 6954 7130 7565 7793 7992 8113 8193 8410 8649 8806 9081 9284 9462 9657 9738 9913 10126 10333 10558 10665 10946]

值6960被跳过,因为它低于6954 + 60 = 7014,同样7167被跳过,因为它低于7130 + 60 = 7190等等。

这是我到目前为止所尝试的但是无法得到理想的结果。

clear
clc
x=[6673 6954 6960 7130 7167 7352 7565 7600 7793 7823 7992 8113 8193 8202 8410 8649 8806 9081 9284 9462 9657 9738 9913 10126 10333 10558 10665 10946];

x1=x(1)-1:x(end)+60;
for i=1:length(x)  
y1(:,i)=find(x(i)==x1)
end

for i=1:25

    y=x1(y1(i))
    y(y+60)=0

    if length(y)<x(i+1)
        y2(:,i)=x1(y1(i))
    else
        y2(:,i)=x1(y1(i+1))
    end

end
 y(y==0) = [];

2 个答案:

答案 0 :(得分:2)

怎么样:

x([true, diff(x) > 60])

但如果x如下:

x = [1 50 100];

您想要输出[1][1, 100]吗?

答案 1 :(得分:1)

我不确定是否有更有效的方法。

但做的事情如下:

dx = diff(x);
while any(dx < 60)
    ib1 = find(dx<60,1,'first')+1;
    x(ib1) = [];
    dx = diff(x);
end

这个解决方案稍微复杂一些,但也更加健壮。