找到具有大于1的最大连续数值的时间区域

Kat*_*tyB 2 matlab find

我有两个时间序列:

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的时间(在哪些行之间).我怎样才能做到这一点?

H.M*_*ter 7

要查找最长运行值的索引,可以使用以下代码:

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)

  • @LastCoder:如果你对Matlab有所了解,那么输入时间(以及开发时间 - 每个角色都是一个潜在的错误)都会下降太多. (2认同)