首页 > 解决方案 > 在Matlab中查找数组中的第一个非连续元素

问题描述

我有一个带有触发器索引号的向量“triggs”。每个触发器持续几毫秒,我需要找到每个触发器的开始位置。

否则,我需要找到连续数组的第一个元素。如果向量是:triggs = [1 2 3 4 5 15 16 17 18 19 20 25 26 27 28 29]

我正在寻找的结果必须是:1、6、12。

这是我通常做的:

     triggs = find(allChans(2,:)>0.2);
     x = [diff(triggs)~=1,true];
        trigWaves = triggs(x); % This contains the start of each trigger in chan 2
        clear x
        nTrigs = length(trigWaves);

问题是,这实际上是找到每个触发器的结束位置,而不是它的开始位置。我过去实际上已经这样做了,但再也找不到解决方案了。

标签: matlabfind

解决方案


Since R2017b, you can do this slightly more simply than using find(diff(...)) by taking advantage of ischange with the 'linear' option. You'll still need to prepend a 1. So,

>> [1, find(ischange(triggs, 'linear'))]
ans =
     1     6    12

推荐阅读