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

1 vue (au cours des 30 derniers jours)
Javier
Javier le 23 Jan 2013
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 commentaire
Cedric
Cedric le 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

Connectez-vous pour commenter.

Réponse acceptée

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

Plus de réponses (3)

per isakson
per isakson le 23 Jan 2013
Try
find( diff( X ) == 1 ) + 1
find( diff( X ) == -1 )
  2 commentaires
per isakson
per isakson le 23 Jan 2013
I've provided more than half of the solution. Your turn.
Javier
Javier le 23 Jan 2013
Thanks per........

Connectez-vous pour commenter.


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

Azzi Abdelmalek
Azzi Abdelmalek le 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

Catégories

En savoir plus sur MATLAB dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by