find first& end of array

4 次查看(过去 30 天)
Hi
S=[ 0 1 5 2 0 0 0 9 3 50 53 0 0 5 7 4] ;
And I want to pick first&last number of continued numbers except 0.
Like in S ->1 ,2 ,9,53, 5,4
Are there any good method?
Thank you.

采纳的回答

Stephen23
Stephen23 2022-5-20
S = [0,1,5,2,0,0,0,9,3,50,53,0,0,5,7,4]
S = 1×16
0 1 5 2 0 0 0 9 3 50 53 0 0 5 7 4
X = diff([0;S(:)]==0)<0 | diff([S(:);0]==0)>0;
V = S(X)
V = 1×6
1 2 9 53 5 4

更多回答(2 个)

the cyclist
the cyclist 2022-5-20
I expect someone will post a more elegant method, but I think this does what you want
S=[0 1 5 2 0 0 0 9 3 50 53 0 0 5 7 4];
first = S(diff([0 S]) == S & S~=0);
last = S(diff([S 0]) ==-S & S~=0);
firstLast = [first; last];
output = firstLast(:)'
output = 1×6
1 2 9 53 5 4

Image Analyst
Image Analyst 2022-5-20
Here's a different way:
S=[0 1 5 2 0 0 0 9 3 50 53 0 0 5 7 4];
S2 = [0,S,0];
indexes = sort([strfind(S2~=0, [0 1]) + 1, strfind(S2~=0, [1,0])])
indexes = 1×6
3 5 9 12 15 17
S3 = S2(indexes)
S3 = 1×6
1 2 9 53 5 4

类别

Help CenterFile Exchange 中查找有关 Resizing and Reshaping Matrices 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by