Я предполагаю, что вы хотите подсчитать количество ведущих и конечных нулей в массиве. Мы можем сделать это с помощью двух вызовов find
с поиском только первого вхождения ненулевого элемента. Индекс первого ненулевого элемента, вычитаемого на 1, скажет вам, сколько нулей есть. Причина, по которой мы вычитаем 1, связана с тем, как массивы индексов MATLAB начинаются с 1. Если они начинаются с 0, тогда нет необходимости вычитать. Если вы хотите trailing нули, найдите последние ненулевой элемент. Количество элементов от этой точки до конца - это количество нулевых элементов. Поэтому:
num_leading = find(r, 1, 'first') - 1;
num_trailing = numel(r) - find(r, 1, 'last');
С вашего примера, мы получим следующее:
num_leading =
1
num_trailing =
2
еще несколько примеров для вас, чтобы показать, что это работает:
Пример # 1
r = [1 1 1 1 1 0 1 0 0];
num_leading = find(r, 1, 'first') - 1
num_trailing = numel(r) - find(r, 1, 'last')
num_leading =
0
num_trailing =
2
Пример № 2
r = [1 1 1 0 0 1 1 1 0 1];
num_leading = find(r, 1, 'first') - 1
num_trailing = numel(r) - find(r, 1, 'last')
num_leading =
0
num_trailing =
0
Пример # 3
r = [0 0 1 0 1 1 0 1 0 0];
num_leading = find(r, 1, 'first') - 1
num_trailing = numel(r) - find(r, 1, 'last')
num_leading =
2
num_trailing =
2
Как вы можете видеть, это может приспособиться к любой форме ваш массив может принять, при условии, что он является 1D и вектор-строка.
Может быть, 'num_trailing = numel (r) - find (r, 1, 'last')' будет быстрее, так как он избегает переворота –
@ LuisMendo да! Я не мог понять, как это сделать в конце. Спасибо, Луис! – rayryeng