2015-10-21 90 views
2

我在MATLAB含有元素如如何识别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 

回答

4

好时机使用difffind这不等于1。然而,这会返回一个数组比你输入数组的长度少一个邻近的那些不同,因为它找到配对差异,直到最后一个元素,所以自然会少一个。因此,当你发现不等于1的位置,一定要加1的位置考虑到这一点:

>> A=[12 13 14 15 30 31 32 33 58 59 60]; 
>> q = find(diff(A) ~= 1) + 1 

q = 

    5  9 

这就告诉我们,您的阵列中的位置1,5和9的地方跳转发生,这对你的示例数据是正确的。

但是,如果你想找到前跳发生,比如在你的代码的位置,不要加1的结果:

>> q = find(diff(A) ~= 1) 

q = 

    4  8