Как определить повторяющиеся шаблоны в данных временных рядов в Matlab - PullRequest
0 голосов
/ 26 января 2019

Я рассчитываю индексы ЭНСО, используя Matlab, и одно из условий - найти аномальные температуры поверхности моря. Условие состоит в том, что событие Эль-Ниньо характеризуется температурой поверхности моря, которая на 0,5 градуса выше нормированного значения «0» в течение 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 голосов
/ 26 января 2019

не уверен, что это то, что вам нужно, но, возможно, дает вам какое-то направление.

> 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

обратите внимание, что из-за различий они на единицу больше, чем индекс массива, или рассматривайте его как позицию для индексации с нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...