Count the sequence of same values in an array until an new value comes up

7 vues (au cours des 30 derniers jours)
J.P.
J.P. le 17 Déc 2016
Commenté : Image Analyst le 1 Déc 2022
Hello everybody!
I need to count every sequence of same values, until a new, different sequence of a value comes up. Then, I need to count the new sequence.
As example: My row is 00000001111-1-1-1-1-1000111
I want to get a table saying:
Element: 0 1 -1 Count: 2 2 1
This means that I have 2 sequences of zeros, two sequences of ones and one sequence of minus ones.
I don't need to count each value, just the sequence until the next sequnece of values!
Thank you.
  1 commentaire
dpb
dpb le 17 Déc 2016
Bruno Luong has a runs-counting submittal at FileExchange that'll probably be just the ticket...

Connectez-vous pour commenter.

Réponses (3)

the cyclist
the cyclist le 17 Déc 2016
Modifié(e) : the cyclist le 17 Déc 2016
Get RunLength from the File Exchange.
Then,
x = RunLength([0 0 0 1 1 -1 -1 0 0 1 1 ]);
u = unique(x); % The unique values
c = histcounts(x,[u Inf]); The number of sequences of those unique values

Jan
Jan le 18 Déc 2016
Modifié(e) : Jan le 18 Déc 2016
Simpler than RunLength, because the sequence length does not matter:
x = [0 0 0 1 1 -1 -1 0 0 1 1 ];
B = x([diff(x)~=0, true]);
u = unique(B); % The unique values
c = histcounts(x, [u, Inf]);
The calculation of B is slower then with RunLength.mex, but if runtime is not the problem in your case, you can save the time and effort for compiling.
  3 commentaires
Reji G
Reji G le 1 Déc 2022
How to count number of zeros(or any other particular number) alone?
Image Analyst
Image Analyst le 1 Déc 2022
@Reji G here are some ways
x = [0 0 0 1 1 -1 -1 0 0 1 1 ];
numZeros = nnz(x == 0)
numZeros = 5
numZeros = numel(x) - nnz(x)
numZeros = 5
numZeros = sum(x == 0, 'all')
numZeros = 5

Connectez-vous pour commenter.


Image Analyst
Image Analyst le 18 Déc 2016
This is trivial (4 lines of code) with bwlabel of the Image Processing Toolbox which counts regions:
m = [0 0 0 0 0 0 0 1 1 1 1 -1 -1 -1 -1 -1 0 0 0 1 1 1] % Instantiate sample data.
uniquem = unique(m)
for k = 1 : length(uniquem)
[labeledData, counts(k)] = bwlabel(m == uniquem(k));
end
% Done! Now show to command window so we can see the results.
counts % Shows 1,2,2 for number of regions for -1, 0, 1
If you don't want the counts in numerical order like -1,0,1 then you can of course simply put "counts" in whatever order you want to sort it in.
  1 commentaire
J.P.
J.P. le 18 Déc 2016
Trivial for you!
Thank you so much! Again all of you. I have got one more point...

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing 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!

Translated by