How to extract values from an array?

48 views (last 30 days)
Daniel Adeniyi
Daniel Adeniyi on 9 Mar 2022
Answered: Rik on 9 Mar 2022
Hello all,
I have an array with values that repeat , is it possible to determine the start and end points of a particular value in the array. For example
array = [10 10 10 30 30 30 30 30 4 4 4 4 4 30 30 30 30 30 30 2 2 2 2 2 30 30 30 30];
the goal is to extract those values in between the 30s.
How can i go about this? Thanks
  4 Comments
Daniel Adeniyi
Daniel Adeniyi on 9 Mar 2022
Yes you are right, I would want as output [4 4 4 4 4 2 2 2 2 2].

Sign in to comment.

Accepted Answer

Rik
Rik on 9 Mar 2022
Using RunLength by Jan:
array = [10 10 10 30 30 30 30 30 4 4 4 4 4 30 30 30 30 30 30 2 2 2 2 2 30 30 30 30];
%first select only the parts between the first and last 30
new_array=array(find(array==30,1,'first'):find(array==30,1,'last'));
[B, N] = RunLength(new_array)
B = 1×5
30 4 30 2 30
N = 5×1
5 5 6 5 4
%remove the 30s
L=B==30;
B(L)=[];
N(L)=[];
%decode back to the normal array
new_array = RunLength(B, N)
new_array = 1×10
4 4 4 4 4 2 2 2 2 2

More Answers (1)

David Hill
David Hill on 9 Mar 2022
a=num2str(yourArray==30);
a=a(a~=' ');
[s,f]=regexp(a,'[1]*');
new_array=[s,f];
  1 Comment
Daniel Adeniyi
Daniel Adeniyi on 9 Mar 2022
Is it possible to have an output such as [4 4 4 4 4 2 2 2 2 2] instead of their unique value.

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by