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.

Community Treasure Hunt

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

Start Hunting!