How to extract values from an array?

20 次查看(过去 30 天)
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 个评论
Rik
Rik 2022-3-9
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 2022-3-9
Yes you are right, I would want as output [4 4 4 4 4 2 2 2 2 2].

请先登录,再进行评论。

采纳的回答

Rik
Rik 2022-3-9
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

更多回答(1 个)

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

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by