How to find first occurrences of a number in the beginning of blocks of that number?

25 views (last 30 days)
For example I have x = [1 2 2 3! 0 0 0 3! 3 3 0 1 1 3! 3 4]; And I need indices of first threes associated its block. Signed with ! In this case indices are: 4,8,14

Answers (2)

Walter Roberson
Walter Roberson on 27 Feb 2018
targetval = 3;
num_wanted = 3;
find(x==targetval, num_wanted, 'first')

Stephen23
Stephen23 on 27 Feb 2018
Edited: Stephen23 on 27 Feb 2018
>> vec = [1,2,2,3,0,0,0,3,3,3,0,1,1,3,3,4];
>> idx = diff(vec==0)>0;
>> idb = find([true,idx]);
>> ide = find([idx,true]);
>> foo = @(v)v&cumsum(v)==1;
>> baz = @(b,e)foo(3==vec(b:e)); % set value to match here.
>> tmp = arrayfun(baz,idb,ide,'uni',0);
>> find([tmp{:}])
ans =
4 8 14

Community Treasure Hunt

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

Start Hunting!