好吧,我建议找到它从0 切换到1的所有位置,然后查找从1切换到0的所有位置,并使用这些索引查找这些长度.问题出现在边缘,如果第一个条目是1,它不会从零切换到1,如果最后一个条目是1,我们永远找不到它,因为最后没有任何东西切换到0.为了轻松避免这个问题,我们可以在开头添加0,在结尾添加一个.通过这种方式,我们可以保证找到每一个爆发.在本质上:
b = [0 a 0];
d = diff(b);
posEdge = find(d==1);
negEdge = find(d==-1);
countOnes = negEdge - posEdge
Run Code Online (Sandbox Code Playgroud)