How to extract values from an array?

27 visualizzazioni (ultimi 30 giorni)
Daniel Adeniyi
Daniel Adeniyi il 9 Mar 2022
Risposto: Rik il 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 Commenti
Rik
Rik il 9 Mar 2022
If you want to extract the numbers, do you mean you want [4 2], or [4 4 4 4 4 2 2 2 2 2];? (or something else)
That is also probably important information if David's answer doesn't work for you.
Daniel Adeniyi
Daniel Adeniyi il 9 Mar 2022
Yes you are right, I would want as output [4 4 4 4 4 2 2 2 2 2].

Accedi per commentare.

Risposta accettata

Rik
Rik il 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

Più risposte (1)

David Hill
David Hill il 9 Mar 2022
a=num2str(yourArray==30);
a=a(a~=' ');
[s,f]=regexp(a,'[1]*');
new_array=[s,f];
  1 Commento
Daniel Adeniyi
Daniel Adeniyi il 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.

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by