Path: news.mathworks.com!not-for-mail
From: <HIDDEN>
Newsgroups: comp.soft-sys.matlab
Subject: Re: Finding end-points for runs
Date: Sun, 27 Jan 2013 06:23:08 +0000 (UTC)
Organization: The MathWorks, Inc.
Lines: 39
Message-ID: <ke2h4c$dju$1@newscl01ah.mathworks.com>
References: <cd7ccb2d-8c83-4568-a565-22f22a9416bf@googlegroups.com>
Reply-To: <HIDDEN>
NNTP-Posting-Host: www-05-blr.mathworks.com
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Trace: newscl01ah.mathworks.com 1359267788 13950 172.30.248.37 (27 Jan 2013 06:23:08 GMT)
X-Complaints-To: news@mathworks.com
NNTP-Posting-Date: Sun, 27 Jan 2013 06:23:08 +0000 (UTC)
X-Newsreader: MATLAB Central Newsreader 1187260
Xref: news.mathworks.com comp.soft-sys.matlab:787471

Gautam Sethi <gautamsethi@gmail.com> wrote in message <cd7ccb2d-8c83-4568-a565-22f22a9416bf@googlegroups.com>...
> Dear all:
> I'm trying to find the end-points for runs of numbers based on a vector. Let
> 
> >> Y = [1 3 4 6 7 8]
> 
> Y =
> 
>      1     3     4     6     7     8
> 
> I want an output vector Z of size(length(Y),2) where 
> 
> Z =
> 
>      0     2
>      2     5
>      2     5
>      5     9
>      5     9
>      5     9
> 
> Here is the idea behind what I want.
> 
> The first  element of Y is 1, which is not followed by the next integer; thus, the integers that "surround" the integer 1 are 0 and 2, the first row of Z.
> 
> The second element of Y is 3, which is followed by the next integer, 4. However there is a break after 4. Thus, the run of consecutive integers 3 and 4 is "surrounded" by the integers 2 and 5. Therefore, the next two rows of Z, corresponding to the two elements 3 and 4 of Y, are [2 5].
> 
> Likewise, the last three elements of Y are consecutive integers, "surrounded" by the integers 5 and 9. Hence the last three rows of Z are [5 9].
> 
> Thanks for your help!
- - - - - - - - -
 Y = Y';
 f = find([true;diff(Y)>1;true]);
 Z = zeros(size(Y,1),2);
 Z(1,:) = [Y(1)-1,Y(f(2)-1)+1];
 Z(f(2:end-1),:) = diff([Y(f(1:end-1)),Y(f(2:end)-1)],1,1);
 Z = cumsum(Z,1);

Roger Stafford