【问题标题】:How to identify breaks within an array of MATLAB?如何识别 MATLAB 数组中的中断?
【发布时间】:2016-01-19 21:58:28
【问题描述】:

我在 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

【问题讨论】:

    标签: arrays matlab for-loop


    【解决方案1】:

    是时候使用 difffind 那些不等于 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
    

    【讨论】:

      猜你喜欢
      • 2014-09-12
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-22
      • 1970-01-01
      • 2015-06-15
      相关资源
      最近更新 更多