Найти последовательность во временных рядах с Matlab

Я хочу написать короткую функцию Matlab для поиска значений последовательности во временном ряду, например:

Пример: a = [0 0 0 1 0 0 1 1 0 1 1 1 1 0 0];

My_expected_result = 3; (как число 1 происходит 3 раза последовательностей)

Спасибо.

1 ответ

Решение

Вот простой regexp решение для определения количества запусков:

result = numel(regexp(char(a+'0'), '1+'));

Вы также можете использовать strfind, который работает для числовых массивов (хотя это не задокументировано):

result = numel(strfind([0 a], [1 0]));

Или просто diff:

result = sum(diff([a 0])<0);

Если у вас есть набор инструментов для обработки изображений, bwlabel можно использовать и для работы:

result = max(bwlabel(a));

или (спасибо rahnema1 за это):

[~, result] = bwlabel(a);
Другие вопросы по тегам