给出以下数组:
multipart/mixed
如何快速重新创建一个保持相同顺序的数组,但跳过连续向量之间的最大差异大于1的值?
期望的结果是:
[158 159 159 160 162 163 161 162 162 168 169 163 164 164 165 171 177 178 166 167]
答案 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)
您可以将diff
与logical 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