86 views (last 30 days)

Let's say we have an arbitrary vector like this with ascending values:

a= [10 11 12 19 21 25 29 30 31 32 33 39 50];

and we want to find the first and last element of each consecutive (integer) values. The answer could be in this form:

First consecutive values: [10 11 12]

Second consecutive values: [29 30 31 32 33]

CI_f = [10 29]

CI_l = [12 33]

How could we do it in MATLAB without loop?

Is it also possible to put a condition for the length of the consecutive values to be between specific numbers of values, let's say between 3 and 8?

Thanks in advance for helping :)

Stephen Cobeldick
on 27 Mar 2018

Edited: Stephen Cobeldick
on 27 Mar 2018

It is easy to identify the first and last elements of consecutive sequences of values:

>> a = [10 11 12 19 21 25 29 30 31 32 33 39 50];

>> D = diff([0,diff(a)==1,0]);

>> first = a(D>0)

first =

10 29

>> last = a(D<0)

last =

12 33

"Is it also possible to put a condition for the length of the consecutive values to be between specific numbers of values, let's say between 3 and 8?"

Yes. Add find and experiment with the differences:

1 + find(D<0) - find(D>0)

Hint: compare against the require limits to generate an index.

Pawel Jastrzebski
on 27 Mar 2018

As to what you put as an answer, it can be coded this way:

CI_f = [CI{1}(1) CI{2}(1)]

CI_l = [CI{1}(end) CI{2}(end)]

And the output is going to be the same:

>> CI_f

CI_f =

10 30

>> CI_l

CI_l =

12 33

However I find it your question completely unclear.

- You've got a vector 'a' consisting of 13 elements.
- Values from that vector are used to create the cell arrays
- 1st cell array CI{1} holds 3 elements which are consecutive vales of 'a': indices 1 to 3
- 2nd cell array CI{2} holds 4 elements which are consecutive vales of 'a': indices 8 to 11
- Where's the pattern here?
- Are there going to be more cell arrays? I.e. CI{3} holding 5 elements of 'a': what indices??
- What are you trying to achieve?
- Why CI's are stored as cells? What's wrong with the row vectors?

Pawel Jastrzebski
on 27 Mar 2018

OK, from what I've seen, you've changed the consecutive values from **cells** to **vectors**.

Once you've got your consecutive vectors created , it easy to find the first and the last value in them - again:

a = [10 11 12 19 21 25 29 30 31 32 33 39 50];

CI_1 = [10 11 12]; CI_2 = [30 31 32 33];

% First and last value in each CI vector:

CI_f = [CI_1(1) CI_2(1)] CI_l = [CI_1(end) CI_2(end)]

- What is the rule that decides that CI_1 will have 3 elements, CI_2 will hold 4 elements etc.?
- What is the rule that decides that CI_1 1st value = 1st value of
**a**? And then the 1st value of CI_2 = 8th value of**a**? Are you choosing them randomly?

As to your sub-question:

*Is it also possible to put a condition for the length of the consecutive values to be between specific numbers of values, let's say between 3 and 8?*

Yes, it is possible.

Test the following code:

a = [10 11 12 19 21 25 29 30 31 32 33 39 50];

% STARTING POINT % select a random staring point which is within the length of 'a' StartPoint = randi(length(a)) % LENGTH % Chose the ranodm lenth Random_Length = randi([StartPoint length(a)]) CI_3 = a(StartPoint:Random_Length)

Pawel Jastrzebski
on 27 Mar 2018

OK, now I see what you meant - sorry, I originally missed the point.

Opportunities for recent engineering grads.

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

Start Hunting!
## 2 Comments

## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/390962-find-the-first-and-last-elements-of-consecutive-values-in-a-vector#comment_550216

⋮## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/390962-find-the-first-and-last-elements-of-consecutive-values-in-a-vector#comment_550216

The second sequence seems to have a mistake, given

ait should be:## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/390962-find-the-first-and-last-elements-of-consecutive-values-in-a-vector#comment_550224

⋮## Direct link to this comment

https://de.mathworks.com/matlabcentral/answers/390962-find-the-first-and-last-elements-of-consecutive-values-in-a-vector#comment_550224

Sign in to comment.