How to count the total number of occurrences of each digit avoiding the first elements of each cell?
    6 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Md Shahidullah Kawsar
 el 7 de Nov. de 2018
  
    
    
    
    
    Comentada: Guillaume
      
      
 el 7 de Nov. de 2018
            Suppose I have a cell array
C = {[1; 4; 7]; [2; 5; 8; 9]; [3; 4]};
c{:}
ans = 
1
4
7
ans =
2
5
8
9
ans=
3
4
   % where any digit won't repeat in the individual cell.
   % There are 4 stages in this cell array. 
   % first stage elements are 1, 2, 3
   % second stage elements are 4, 5, 4
   % third stage elements are 7,8
   % fourth stage elements are 9
I need to count the total number of occurrences of each digit except stage 1 that means by avoiding the first elements of each cell. Expected output:
Digit | Number of occurrences
  4        2
  5        1
  7        1
  8        1
  9        1
1 comentario
  Guillaume
      
      
 el 7 de Nov. de 2018
				Please don't ask the same question twice, thus wasting everybody's effort.
Respuesta aceptada
  Nick
      
 el 7 de Nov. de 2018
        
      Editada: Nick
      
 el 7 de Nov. de 2018
  
      You could do the following if you don't mind using some for loops
 % example data  
C = {[1; 4; 7]; [2; 5; 8; 9]; [3; 4]};
 % get the highest digit to make an array in which you store your count  
highestDigit = max(cell2mat(C));
countArray = zeros(2, highestDigit);
 % replace the second row with the digits
countArray(2,:) = 1:highestDigit;
 % then loop over the cell array
for ii = 1:numel(C)
  digits = C{ii}(2:end); % filter out the first digit
  for jj=1:numel(digits)
     countArray(1,digits(jj)) = countArray(1,digits(jj)) + 1; % add one every time it occurs
  end
end
% remove the zeros
maskZeros = countArray(1,:)~=0;
countArray = countArray(:,maskZeros);
% print the result
fprintf('Digit  |  Number of occurrenced \n')
for ii = 1:length(countArray)
 fprintf('%d             %d \n',countArray(2, ii), countArray(1,ii)); 
end
2 comentarios
  Nick
      
 el 7 de Nov. de 2018
				It depends how you want to display it:
Only showing the numbers that occurred you can do
figure;
binNames = strsplit(num2str(countArray(2,:)),' ');
h = histogram('Categories', binNames,'BinCounts', countArray(1,:));
Or if you want to show a real histogram by not removing the zeros. Just remove the following lines
maskZeros = countArray(1,:)~=0;
countArray = countArray(:,maskZeros);
and then add this command the end.
binEdges = [0, countArray(2,:)]+0.5;
h = histogram('BinEdges', binEdges,'BinCounts', countArray(1,:));
When first starting its always handy to explore the properties of the object handle (h) so you know how you can customize your histogram.
Más respuestas (0)
Ver también
Categorías
				Más información sobre Numeric Types en Help Center y File Exchange.
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!