Начало и конец последовательного запуска значения из заданного индекса - PullRequest
0 голосов
/ 28 мая 2018

Я хочу обнаружить первое и последнее число в векторе, равном определенному значению, в рамках одного и того же последовательного прогона этого значения, без использования циклов.

В примере давайте предположим, что у меня есть вектор

x = [1 2 2 3 1 1 1 2 2 3]

Я хочу знать положение первого и последнего последовательных элементов, начиная с 6-го элемента.

Таким образом, в этом случае это будет означать подсчет количества последовательных 1 (до и после) из 6-го элемента x.Ожидаемый результат: y=[5 7].

1 Ответ

0 голосов
/ 28 мая 2018

Вы можете использовать find дважды, один раз работая в обратном направлении от вашего ссылочного индекса и один раз работая вперед.

Из вашего примера:

x = [1 2 2 3 1 1 1 2 2 3];
idx = 6;

% Logical index for elements equal to x(idx)
same = (x == x(idx));

% Get last index (up to idx) where not equal to x(idx)
istart = find(~same(1:idx-1), 1, 'last')
% Get first index (after idx) where not equal to x(idx)
iend   = find(~same(idx+1:end), 1, 'first');

% Account for edge cases where consecutive run spans to the end of the array
% Could use NaN or anything else. These values will result in the value idx.
if isempty(istart); istart = idx-1; end;     
if isempty(iend); iend = 1; end;

y = [istart+1, idx+iend-1];

Вывод:

disp(y)
% >> y = [5 7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...