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

16 vues (au cours des 30 derniers jours)
Mr M.
Mr M. le 27 Fév 2018
Modifié(e) : Stephen23 le 27 Fév 2018
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

Réponses (2)

Walter Roberson
Walter Roberson le 27 Fév 2018
targetval = 3;
num_wanted = 3;
find(x==targetval, num_wanted, 'first')

Stephen23
Stephen23 le 27 Fév 2018
Modifié(e) : Stephen23 le 27 Fév 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

Catégories

En savoir plus sur Operators and Elementary Operations dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by