我正在使用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
请注意,由于差异滞后,这些比数组索引多一个,或者将其视为从零开始索引的位置。