Finding a minumum range of sequential values
이전 댓글 표시
Further to a question that was asked a few days ago (which Matt Fig answered to the satisfaction of the author - see link below):
http://www.mathworks.com/matlabcentral/answers/9393-basic-question-how-to-find-range-of-index-values
In particular, I am searching for a sequence of a minimum of 5 ones in order to perform another function on these elements. That is to say that I would like to perform the second function on any sequence where 5 or more ones may occur. Currently my code looks like:
S3 = findstr(B, ones(1, 5));
But when performing the second action, should the sequence happen to be greater than 5, I find that only the first 5 values identified with the code above are addressed. For example, I have a run of 10 ones, where only the first five values are are found and subsequently computed. Instead, I would like to compute values for all 10 elements appearing in the sequence.
Any ideas on how I might be able to get around this?
The data is a single row vector (1 X 14620); A range of integers where min value = 1 and max value = 6578
e.g
B = [17 4 1 3 2 3 2 1 1 1 1 1 1 1 1 1 1 2 .........12 1 15 372 3 1 1 1 2 42 93 1 105 5 1 1 1 1 78 1 2]
채택된 답변
추가 답변 (3개)
Image Analyst
2011년 6월 22일
1 개 추천
If you have the Image Processing Toolbox, it's trivial. Just call bwlabel and regionprops (asking for Area and PixelIdxList), find those with area >= 5, and you're done in only about 3 lines of code, with the indexes of all 1's in a run of 5 or more.
Walter Roberson
2011년 6월 22일
By the way:
endpos = find(B(S3(1):end)~=1,1);
if endpos is empty then everything to the end of B is 1's.
Andrei Bobrov
2011년 6월 22일
x = B == 1;
idx1int = [strfind([0 x],[0 1]); strfind(x,[1 0])];
idxout = idx1int(:,diff(idx1int,1)+1>=5);
nout = diff(idxout,1)+1;
카테고리
도움말 센터 및 File Exchange에서 Display Image에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!