【问题标题】:Find first non consecutive element in array in Matlab在Matlab中查找数组中的第一个非连续元素
【发布时间】:2020-11-25 18:39:01
【问题描述】:

我有一个向量“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);

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

【问题讨论】:

  • 那么,find([true diff(triggs)~=1])?
  • 是的,就是这样,谢谢 Luis :)

标签: matlab find


【解决方案1】:

从 R2017b 开始,您可以通过使用带有 'linear' 选项的 ischange 来比使用 find(diff(...)) 稍微简单一些。您仍然需要在前面加上 1。所以,

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    相关资源
    最近更新 更多