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

What would be the intended output? Perhaps this?
new_array=[4 2];
You can probably use most of the RunLength function Jan published on the file exchange.
Daniel Adeniyi
Daniel Adeniyi 2022년 3월 9일
let me check out the RunLength function. i want to use the indices of the start and end 30 to extract the values in between to a new array. Thanks
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일

0 개 추천

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일

0 개 추천

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.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

질문:

2022년 3월 9일

답변:

Rik
2022년 3월 9일

Community Treasure Hunt

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

Start Hunting!

Translated by