Hello, I got a problem when dealing with numbers classifying in a vector. Problem is like that:
With a vector A = [1 2 3 4 5 9 10 13 15 17 18 19 21 24];
I try to separate the consecutive series and non-consecutive series so that I am able to have outputs like:
a=[1 2 3 4 5]
b=[9 10]
c=[13]
d=[15]
..etc
I tried diff() and regexp (), but I still can't solve it.
If anyone can help, it would be greatly appreciated.
Thank you!

 Réponse acceptée

Stephen23
Stephen23 le 22 Jan 2016
Modifié(e) : Stephen23 le 22 Jan 2016

0 votes

Here is a simple solution in just two lines:
>> A = [1 2 3 4 5 9 10 13 15 17 18 19 21 22 24 25];
>> idx = find([true,1~=diff(A),true]);
>> out = arrayfun(@(x,y)A(x:y),idx(1:end-1),idx(2:end)-1,'UniformOutput',false);
>> out{:}
ans =
1 2 3 4 5
ans =
9 10
ans =
13
ans =
15
ans =
17 18 19
ans =
21 22
ans =
24 25

Plus de réponses (1)

Azzi Abdelmalek
Azzi Abdelmalek le 22 Jan 2016
Modifié(e) : Azzi Abdelmalek le 22 Jan 2016

1 vote

A = [8 1 2 3 4 5 9 10 13 15 17 18 19 21 22 24 25];
ii=[1 diff(A)];
idx1=[1 find(ii~=1)];
idx2=[idx1(2:end)-1 numel(A)];
out=arrayfun(@(x,y) A(x:y),idx1,idx2,'un',0);
celldisp(out)

Catégories

En savoir plus sur Text Analytics Toolbox dans Centre d'aide et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by