如何在 Matlab 中识别时间序列数据中的重复模式



我正在使用Matlab计算ENSO指数,其中一个条件是我必须找到异常的海面温度。条件是厄尔尼诺事件的特征是海面温度比归一化"0值"高0.5度,持续5个月。我已经使我的每月时间序列数据合乎逻辑(即"1"是高于 0.5 的每月数据值,"0"是低于 0.5 的每月数据值),但我想知道 Matlab 中是否有一个命令允许我识别该值何时重复 5 次或更多。

作为示例代码:

Monthly_data=[0 0 1 1 1 1 1 0 0 0 1 1 0 0 0 0 1 0 1 1 1 1 1 1 1 0]

理想情况下,我需要一个命令来查找何时至少出现五个"1"。这存在吗?

如果需要更多信息,请告诉我,我是 matlab 的新手,所以我还不确定在这里提问的结构和语法。

谢谢!

不确定

这是你需要的,但也许会给你一些方向。

> x = diff(Monthly_data);
> find(x==-1)-find(x==1)
ans =
   5   2   1   7

这些是1序列的长度。 您可能需要用0填充数组的前端和结尾,以消除缺少一个边界的序列。

要查找长度大于 5 的序列的起始索引,请执行以下操作:

> s=find(x==1);
> s(find(x==-1)-s>5)
ans =  18

> s(find(x==-1)-s>=5)
ans =
    2   18

请注意,由于差异滞后,这些比数组索引多一个,或者将其视为从零开始索引的位置。

最新更新