Cycle counting from 0
    4 views (last 30 days)
  
       Show older comments
    
I have a matrix [ 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0] for exemple
I'd like to have an outing: 
2 x 4 "0" in succession 
2 x 2 "0" in succession 
1 x 3 "0" in succession 
How to program it
Thank you.
2 Comments
  Image Analyst
      
      
 on 11 Dec 2019
				
      Edited: Image Analyst
      
      
 on 11 Dec 2019
  
			I have no idea what you want.  What is an "outing"?  Do you mean output?  If so, what is the output array you want?  I can't tell from your word descriptions.  Type it out in numbers like you did for the input matrix.
  Stephen23
      
      
 on 12 Dec 2019
				stefan's "Answer" moved here:
With this matrix : [ 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0 ] 
I would have liked to have this matrix :
|5 2|
|6 1|
|4 1|
With the 1st column the number of successive 0
With the 2nd column the number of the sequence
thanks
Accepted Answer
  Stephen23
      
      
 on 12 Dec 2019
        
      Edited: Stephen23
      
      
 on 12 Dec 2019
  
      >> M = [0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0];
>> D = diff([false;M(:)==0;false]);
>> L = find(D<0) - find(D>0);
>> [U,~,X] = unique(L,'stable');
>> V = histc(X,1:max(X));
>> Z = [U(:),V(:)]
Z =
     5     2
     6     1
     4     1
7 Comments
  Stephen23
      
      
 on 14 Dec 2019
				
      Edited: Stephen23
      
      
 on 14 Dec 2019
  
			"I have a vector that can have values from 1 to 15. I would like to know the number of times for all the possible changes: for example:"
from 1 to 2
from 2 to 11 
from 14 to 3
....
None of your provided data includes the values 11 or 14, so you are asking me to help you on an unknown algorithm with unknown data. Sorry, but my magic crystal ball is not working today.
"from 2 to 3 and from 3 to 4, I don't have the couples (1,2) and (2,3)."
Well, that makes two of us, because I don't have them either! Nor do you explain what they are, or how they relate to 1, 2, 11, 14, and 3 from your previous comment, or the binary data of your original question.
One clear explanation of the method/algorithm (complete with input and output example data) would actually mean that you get the help that you are looking.
More Answers (1)
  Akira Agata
    
      
 on 12 Dec 2019
        How about the following?
x = [0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 0];
str = num2str(x')';
c = regexp(str,'0+','match');
len = cellfun(@numel,c);
output = [(1:max(len))', accumarray(len',1)];
The result becomes like this:
>> output
output =
     1     0
     2     0
     3     0
     4     1
     5     2
     6     1
2 Comments
  Akira Agata
    
      
 on 12 Dec 2019
				You mean, the order is also important?
My output is same as what you expected, except the order of rows and including 0 sequence cases (such as 1~3 consecutive zeros).
See Also
Categories
				Find more on Creating and Concatenating Matrices in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


