2014-12-24 2 views

ответ

1

Я предполагаю, что вы хотите подсчитать количество ведущих и конечных нулей в массиве. Мы можем сделать это с помощью двух вызовов 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 и вектор-строка.

+1

Может быть, 'num_trailing = numel (r) - find (r, 1, 'last')' будет быстрее, так как он избегает переворота –

+0

@ LuisMendo да! Я не мог понять, как это сделать в конце. Спасибо, Луис! – rayryeng

Смежные вопросы