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

时间:2019-01-25 22:07:57

标签: matlab time-series

我正在使用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的新手,所以我不确定在这里提问的结构和语法。

谢谢!

1 个答案:

答案 0 :(得分:1)

不确定这是您所需要的,但也许会给您一些指导。

> 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

请注意,由于存在差异滞后,它们比数组索引多一,或者将其视为基于零的索引的位置。