# How to count elements in array until criteria is met and output number of elements?

5 vues (au cours des 30 derniers jours)
Nicholas Kavouris le 28 Mar 2022
Commenté : Matt J le 29 Mar 2022
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 commentairesAfficher -2 commentaires plus anciensMasquer -2 commentaires plus anciens

Connectez-vous pour commenter.

### Réponses (2)

Image Analyst le 28 Mar 2022
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
startingLocations = 1×2
33 58
durations = [props.Area] % How many 5's are in each run of 5's.
durations = 1×2
4 3
##### 4 commentairesAfficher 2 commentaires plus anciensMasquer 2 commentaires plus anciens
Nicholas Kavouris le 28 Mar 2022
i do not, appreciate the help though
Image Analyst le 28 Mar 2022
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.

Connectez-vous pour commenter.

Matt J le 28 Mar 2022
Modifié(e) : Matt J le 28 Mar 2022
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 commentairesAfficher AucuneMasquer Aucune
Nicholas Kavouris le 29 Mar 2022
Can this function be used for multiple conditons? Also reading your examples does not include the groupLims fcn
Matt J le 29 Mar 2022
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.
Now you have one!

Connectez-vous pour commenter.

### Catégories

En savoir plus sur Numeric Types dans Help Center et File Exchange

R2021b

### Community Treasure Hunt

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

Start Hunting!

Translated by