Нахождение чередующихся последовательностей в MATLAB - PullRequest
2 голосов
/ 29 января 2012

У меня есть такой вектор:

x = [0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1]

Как мне получить начальный и конечный индексы чередующейся последовательности?(т. е. 1 и 2)

Ответы [ 2 ]

1 голос
/ 29 января 2012

Если вы знаете, что у вас есть только одна последовательность, и она всегда [1 2 ... 1 2], вы можете просто использовать strfind

x = [0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 2 1 2 1 2 1 2 1 2 1 2 1 2 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1];

idx = strfind(x, [1 2]);

start = idx(1);
end = idx(end)+1;

Если может быть несколько вхождений, или если это не всегда 1-2, или если последовательность не завершена (например, 1 2 1 вместо 1 2 1 2), вы можете использовать diff вместо:

dx = diff(x);
alt = dx(2:end)==-dx(1:end-1) & dx(1:end-1)~=0;

starts = find(diff(alt)>0) + 1;
ends = find(diff(alt)<0) + 2;
1 голос
/ 29 января 2012

Я думаю, что это крутой метод, хотя числовые / массивные методы будут быстрее: P Вы можете использовать регулярное выражение!

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