How do I count the number of zeros in a matrix?
    118 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    Franchesca
 el 18 de Abr. de 2014
  
    
    
    
    
    Comentada: Walter Roberson
      
      
 el 19 de En. de 2021
            I have data imported from excel into a matrix and want to count the number of zeros in the file to work out the time.
0 comentarios
Respuesta aceptada
  Azzi Abdelmalek
      
      
 el 18 de Abr. de 2014
        
      Editada: Azzi Abdelmalek
      
      
 el 18 de Abr. de 2014
  
      A=[0 0 1;0 2 4;7 8 1]
idx=A==0
out=sum(idx(:))
or
out=nnz(~A)
3 comentarios
  Walter Roberson
      
      
 el 24 de Sept. de 2017
				Azzi's code suggestions both output 1 for [0 90 180], which would appear to be the correct answer; what result were you expecting?
Más respuestas (4)
  Mischa Kim
    
      
 el 18 de Abr. de 2014
        
      Editada: Image Analyst
      
      
 el 14 de En. de 2021
  
      Caroline, use
 numberOfZeros = sum(data(:)==0)
3 comentarios
  Gabriela Garcia
 el 19 de En. de 2021
				Can this be modified so that it searches for the number of zeros in a specific column of the matrix? I want to see the number of zeros each column has.
  Walter Roberson
      
      
 el 19 de En. de 2021
				sum(data(:,COLUMN)==0)
If you want to know column-by-column, then
sum(data == 0, 1)
or most compactly (but less clear)
sum(~data,1)
If you are sure that there are more than one rows, then
sum(~data)
is even more compact.
  Image Analyst
      
      
 el 18 de Abr. de 2014
        The way I thought of is different still:
numberOfZeros = numel(data) - nnz(data);
Now how that allows you to "to work out the time", I have no idea. What do you mean by that? Is one of the rows or columns a time or date number?
2 comentarios
  Image Analyst
      
      
 el 20 de Abr. de 2014
				Nope. That's not a good idea. You need to count the number of zero stretches, not the number of zeros. Good thing you explained the larger context so we can see that what you asked for is probably not what you need. What if a person jumped 3 times: she jumped high the first time so that there were 3 zeros the first jump, 2 zeros at the second jump, and just a single zero for the third jump? Well that's 3 jumps, not 6 like you'd get if you counted zeros.
That's why it's important to give the context at the start so people don't give you wrong answers, like we all did up til now. Often a person asks very specifically "How do I do X?" and then later it becomes known that the person wanted outcome Z and thought X was the best approach. Then people realize that approach X is not the correct or best approach, and the poster should use approach Y. I think that's the situation here.
If you have the Image Processing Toolbox, you can simply count the number of jumps this way:
[labeledRegions, numberOfJumps] = bwlabel(data == 0);
If you don't have that toolbox you can count the number of "jump starts" by taking the difference and counting how many are more than 0.
diffs = diff(data); % data(k+1)-data(k);
jumpStarts = (diffs > 0) & data(1:end-1) == 0;
numberOfJumps = sum(jumpStarts);
or something like that.
  palaniraj p
 el 22 de Nov. de 2017
        x=[ 1 4 0; 0 3 3; 5 0 0]
 nr=size(x,1);
 nc=size(x,1);
 xz=0; 
for ir=1:nr
 for ic=1:nc 
if x(ir,ic)==0 
xz=xz+1; 
end 
end 
end 
xz
0 comentarios
  Salam Ismaeel
      
 el 21 de En. de 2020
        % for a vector 
sum(A == 0)
% for a 2D matrix
sum(sum(A == 0)
6 comentarios
  Walter Roberson
      
      
 el 21 de En. de 2020
				In order to use your code, you need
if isvector(A)
    out = sum(A == 0);
elseif ismatrix(A)
    out = sum(sum(A == 0));
elseif ndims(A) == 3
    out = sum(sum(sum(A == 0)));
elseif ndims(A) == 4
    out = sum(sum(sum(sum(A == 0))));
else
    error('sorry, code only handles up to 4 dimensions')
end
Where-as Mischa's code would be simply
out = sum(A(:) == 0);
which would handle all number of dimensions including more than 4 dimensions.
Under what circumstances do you see your code as being advantageous compared to Mischa's ?
  Salam Ismaeel
      
 el 21 de En. de 2020
				If you read my comments correctly, I said for a vector and for a 2D matrix only!
Ver también
Categorías
				Más información sobre Matrix Indexing 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!










