matlab - 在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);
问题是,这实际上是找到每个触发器的结束位置,而不是它的开始位置。我过去实际上已经这样做了,但再也找不到解决方案了。
解决方案
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
推荐阅读
- c# - 无法使用 Firebase 配置保存和加载
- docker - 码头同步问题:我正在运行 docker-sync start cmd,但出现错误
- python - 在一张图中绘制来自不同数据帧的 std 的阴影线(Python)
- active-directory - Get-ADUser - 搜索过期帐户。在命令中使用变量
- ffmpeg - 如何从 .mpd 播放列表文件下载视频
- oracle - 在案例查询中基于计数返回值
- ios - 'UIAlertView' 已弃用:首先在 iOS 9.0 中弃用
- flutter - 添加了获取它的依赖项。IDE给出版本解决错误
- python - 如何在 Tkinter Entry 小部件中一次生成多个字符?
- c# - 忽略 StreamReader 的 HttpRequest 字段