From help-octave-request at bevo dot che dot wisc dot edu Fri Mar 3 19:06:08 2000 Subject: Re: counting runs of a certain length in binary data From: Mike Miller To: "John W. Eaton" cc: Help-Octave List Date: Fri, 3 Mar 2000 19:06:06 -0600 (CST) On Fri, 3 Mar 2000, John W. Eaton wrote: > Would the following work? > > y = [0; X; 0]; > find (diff (y) == -1) - find (diff (y) == 1) > > X is the vector of binary digits. The idea is that prepending and > appending zeros ensures that the first nonzero element of diff(y) will > be 1 and that the last nonzero element will be -1, and that there will > be an equal number of 1 and -1 elements. Then the results of the two > find commands should always have the same length, and their difference > should be the run-lengths for the ones in the original vector. John-- That was great! Thanks much. It wasn't quite what I was looking for, but it did give me the clue I needed to get what I wanted. Your code gives run lengths for ones, but I needed run lengths for ones and for zeros. I used the 'find' idea you presented and altered it as follows: diff (find (diff ([2; X; 2]) ~= 0)) The use of '2' is an arbitrary choice: I had to put something other than zeros or ones in there. That line of code gives me a vector of run lengths as follows: octave:1> X=[0 0 0 1 1 0 0 0 0 0 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0]'; octave:2> diff (find (diff ([2; X; 2]) ~= 0)) ans = 3 2 5 6 1 1 7 If I need to count how many runs are length N or longer, as I'd originally planned, I can use this line of code: sum (diff (find (diff ([2; X; 2]) ~= 0)) >= N) Thanks again. That was a big help. It's amazing how much can be done with Octave in a single compact line. Mike ----------------------------------------------------------------------- Octave is freely available under the terms of the GNU GPL. Octave's home on the web: http://www.che.wisc.edu/octave/octave.html How to fund new projects: http://www.che.wisc.edu/octave/funding.html Subscription information: http://www.che.wisc.edu/octave/archive.html -----------------------------------------------------------------------