Find cases of vectors-patterns in an array

2 views (last 30 days)
I have 4 cases of vectors inside an array that I want to index. All of them have trailing -1. I would like to index such patterns in my array.
Case 1
0 -1 -1 -1...-1 0 % starts with 0 ends with 0
Case 2
0 -1 -1 -1...-1 1 % starts with 0 ends with 1
Case 3
1 -1 -1 -1...-1 1 % starts with 1 ends with 1
Case 4
1 -1 -1 -1...-1 0 % starts with 1 ends with 0
An example of an array could be:
t=[0 0 0 0 0 *0 -1 1* 1 1 1 1 *1 -1 -1 -1 1* 0 0 0 0];
In this array case 2 and case 3 are observed in between the asterisks.
Thank you!

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 17 Aug 2013
Edited: Andrei Bobrov on 17 Aug 2013
t=[0 0 0 0 0 0 -1 1 1 1 1 1 1 -1 -1 -1 1 0 0 0 0];
t1 = t(:).' == -1;
ii = [strfind(t1,[0 1]);strfind(t1,[1 0])+1].';
cases = [0 0;0 1;1 1;1 0];
[i1,i1] = ismember(t(ii),cases,'rows');
out = [i1, ii];

More Answers (1)

Giorgos Papakonstantinou
Giorgos Papakonstantinou on 17 Aug 2013
Edited: Giorgos Papakonstantinou on 17 Aug 2013
I had also this in my mind as a backup
idx= [0; diff(t1'==-1)]==-1 | [diff(t1'==-1); 0]==1;
a=reshape(t1(idx),2,[])
Then the vector cases you said above in combination with ismember would provide what I wanted.

Categories

Find more on Matrices and Arrays in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!