【问题标题】: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】:
是时候使用 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