Count instances of subarray inside array
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
For an array
A = [2,2,2,2];
I would like to count how many times [2,2] appears in A, using each value only in one possible pair.
For example,
numel(strfind(A,[2,2]))
returns 3.
But if each "2" is used only once, then we have only 2 instances, instead of 3.
A is not necessarily of all same elements or even-number size, it could be e.g. A = [1,2,3].
Is there a simple way to do that?
2 commentaires
Réponses (1)
Turlough Hughes
le 4 Nov 2021
You could do the following:
b = A == 2; % binary indicating where A equal to 2
count = 0;
ii = 1;
while ii < numel(A)
if b(ii+1) && b(ii)
count = count + 1;
ii = ii + 1;
end
ii = ii + 1;
end
When there is a match, the loop variable, ii, increments an extra time so that each "2" is only used once.
3 commentaires
Turlough Hughes
le 4 Nov 2021
Modifié(e) : Turlough Hughes
le 7 Nov 2021
Another way would be to get the length of each group of twos (based on this answer by @Image Analyst) and then round down each group's length to the nearest whole number divisible by two:
measurements = regionprops(A == 2, 'Area');
allLengths = [measurements.Area];
count = sum(floor(allLengths/2))
(if you have the image processing toolbox)
Voir également
Catégories
En savoir plus sur Matrices and Arrays dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!