我正在使用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的新手,所以我不确定在这里提问的结构和语法。
谢谢!
答案 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
请注意,由于存在差异滞后,它们比数组索引多一,或者将其视为基于零的索引的位置。