Если вы знаете, что есть только одна последовательность, и это всегда [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;
вы можете посмотреть на 'ABS (диф (x)) ', а для чередующихся последовательностей длины не менее N , это будет прогон как минимум N одинаковых чисел, которые не равны 0. –
hmmm, scrap that - это дополнительно классифицирует '1,3,5,7, ..' как чередующуюся последовательность. –