我有两个时间序列:
dat = [0,2,3,0,2,2,0,0,1,0.8,3,4,6,7,4,4,3,0,1,3,2.2,0];
dat2 = dat+.5;
time = 1:length(dat);
plot(time,dat);
hold on;
plot(time,dat2,'r');
Run Code Online (Sandbox Code Playgroud)
我想及时发现这两个向量的连续数值大于1的区域.因此,对于这个特定的例子,两个向量在10到18之间具有大于1的值.但是,它们在其他几个场合也具有大于1的值.我可以通过首先生成一个矩阵来获得大于1的值的索引:
data = [dat',dat2'];
Run Code Online (Sandbox Code Playgroud)
然后使用find
r1 = data>1;
Run Code Online (Sandbox Code Playgroud)
这将为我提供每个值大于1的位置.接下来我想找到在最长持续时间内保持值> 1的时间(在哪些行之间).我怎样才能做到这一点?
要查找最长运行值的索引,可以使用以下代码:
dat = [0,2,3,0,2,2,0,0,1,0.8,3,4,6,7,4,4,3,0,1,3,2.2,0];
id = find(dat>1);
x = [0 cumsum(diff(id)~=1)];
id(x==mode(x))
Run Code Online (Sandbox Code Playgroud)
这导致了
ans =
11 12 13 14 15 16 17
Run Code Online (Sandbox Code Playgroud)
此代码可与矩阵一起使用:
dat = [0,2,3,0,2,2,0,0,1,0.8,3,4,6,7,4,4,3,0,1,3,2.2,0];
dat2 = dat+.5;
data = [dat',dat2'];
id = find(all(data>1, 2));
x = [0; cumsum(diff(id(:))~=1)];
id(x==mode(x))
Run Code Online (Sandbox Code Playgroud)
此代码提供两列中最长运行值大于1的索引:
ans =
11
12
13
14
15
16
17
Run Code Online (Sandbox Code Playgroud)