How to count elements in array until criteria is met and output number of elements?
조회 수: 5 (최근 30일)
이전 댓글 표시
I have an array documenting states of a system and need to find system active duration.
An array looks something like
[1 1 1 1 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 1 1 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5]
Each integer is the system state output from the controller. How can I create a method to count the number of elements in the array until the array becomes 5 (shutdown), repeat counting for the next system cycle, and output the duration (number of elements) of each cycle independently?
댓글 수: 0
답변 (2개)
Image Analyst
2022년 3월 28일
Try using regionprops(), if you have the Image Processing Toolbox (type ver to check)
v = [1 1 1 1 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 1 1 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5];
v5 = v == 5;
% Find starting locations and durations
props = regionprops(v5, 'PixelList', 'Area');
for k = 1 : length(props)
startingLocations(k) = props(k).PixelList(1,1);
end
startingLocations % Echo to command window
durations = [props.Area] % How many 5's are in each run of 5's.
댓글 수: 4
Image Analyst
2022년 3월 28일
Well that gets you the number of non-5 counts though.
By the way, take a look at splitapply(), groupsummary(), and findgroups(). They are handy functions to know about.
Matt J
2022년 3월 28일
편집: Matt J
2022년 3월 28일
Download this,
Then,
array = [1 1 1 1 2 2 2 3 3 3 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5 5 1 1 1 2 2 3 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 5 5];
G=groupTrue(array~=5);
[~,~,durations]=groupLims(G,1)
durations =
32 21
댓글 수: 2
Matt J
2022년 3월 29일
Can this function be used for multiple conditons?
You mean like this?
G=groupTrue(array~=5 & array~=2);
The argument to groupTrue can be any logical vector.
Also reading your examples does not include the groupLims fcn
Now you have one!
참고 항목
카테고리
Help Center 및 File Exchange에서 Numeric Types에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!