我在MATLAB中有一个包含元素的数组,如
A=[12 13 14 15 30 31 32 33 58 59 60];
如何识别数据值中的断点?例如,上面的数据在元素15和33处显示中断。元素按升序排列,并有一个增量为1。我如何在数组中识别这种模式的断点的位置?我使用for和if语句(下面的代码)实现了这一点。有更好的方法吗?
count=0;
for i=1:numel(A)-1
if(A(i+1)==A(i)+1)
continue;
else
count=count+1;
q(count)=i;
end
end
是时候使用相邻不等于1的diff
和find
了。然而,这将返回一个比输入数组长度少1的数组,因为它会找到直到最后一个元素的成对差异,所以自然会少1。因此,当您找到不等于1的位置时,请确保在位置上添加1以解释此问题:
>> A=[12 13 14 15 30 31 32 33 58 59 60];
>> q = find(diff(A) ~= 1) + 1
q =
5 9
这告诉我们数组中的位置5和9是跳转发生的地方,这对您的示例数据是正确的。
但是,如果您想在跳转发生之前找到的位置,例如在您的代码中,请不要在结果中添加1:
>> q = find(diff(A) ~= 1)
q =
4 8