我有一个行向量:
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) = [];
答案 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
这个解决方案稍微复杂一些,但也更加健壮。