How to extract the first and last position for each ones series ?

1 view (last 30 days)
For example
How to extract the first and last position for each ones series ?
X= [0 0 1 1 1 0 1 1 0 1 1 1 0 0 1 ]
%result
y =
3 5
7 8
10 12
15 15
Thanks
  1 Comment
Cedric
Cedric on 23 Jan 2013
If it is for indexing something else afterwards, you can use that almost directly for logical indexing; you just have to typecast it to logical. E.g.
>> X = [0 0 1 1 1 0 1 1 0 1 1 1 0 0 1 ] ;
>> a = 1:15 ;
>> a(logical(X))
ans =
3 4 5 7 8 10 11 12 15

Sign in to comment.

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 23 Jan 2013
y = [strfind([~X(1) X],[0 1]);strfind([X ~X(end)],[1 0])]';

More Answers (3)

per isakson
per isakson on 23 Jan 2013
Try
find( diff( X ) == 1 ) + 1
find( diff( X ) == -1 )

Roger Stafford
Roger Stafford on 23 Jan 2013
f = find([false,diff(x)~=0,false]);
y = [f(1:2:end)',f(2:2:end)'-1];

Azzi Abdelmalek
Azzi Abdelmalek on 23 Jan 2013
You can use
x= [ 0 0 1 1 1 0 1 1 0 1 1 1 0 0 1 ]
y=[x(1) diff(x)] % to find the first column
x1=fliplr(x) % to find the second column by the first method, just by
% reversing x

Categories

Find more on Mathematics in Help Center and File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!