МАТЛАБ: как суммировать их в векторе? - PullRequest
2 голосов
/ 02 марта 2012

Например:

a = [1 1 0 0 1 1 0 1 1 1 0 0];

Теперь я хочу суммировать только те, которые делятся на нули:

ones = [2 2 3] - это означает, что два, тогда у нас есть 2 нуля, которые мы не считаем, затем снова два и т.д.

Как я могу это сделать?*

1 Ответ

7 голосов
/ 02 марта 2012

Хорошо, я бы предложил найти все места, где он переключается с 0 на 1, а затем найти все места, где он переключается с 1 на 0, и использовать эти индексы, чтобы найти эти длины.Проблема возникает на краях, где, если первая запись равна 1, она не переключает на единицу с нуля, а если последняя запись равна 1, мы никогда не найдем ее, потому что в конце ничего не переключается на 0,Чтобы легко избежать этой проблемы, мы можем добавить 0 в начале и один в конце.Таким образом, мы гарантируем, что найдем каждый из этих взрывов.По сути:

b = [0 a 0];
d = diff(b);

posEdge = find(d==1);
negEdge = find(d==-1);

countOnes = negEdge - posEdge
...