Find indices of elements equal to zero in a NumPy array
ML System Design practice on Codemia
Design recommenders, ranking systems and training pipelines the way ML interviews actually ask for them, with worked solutions.
Introduction
Finding zero values in a NumPy array is a small operation that appears in many real tasks, including mask construction, sparse-data cleanup, and debugging numerical pipelines. The main question is not whether NumPy can do it, but which indexing function returns the shape of result you actually need.
Using np.where for Basic Index Lookup
np.where returns index positions where a condition is true. For a one-dimensional array, that means a tuple containing one NumPy array of matching indices.
The expression values == 0 creates a boolean mask. np.where turns that mask into index positions. The final [0] is necessary because NumPy returns one index array per dimension.
This is usually the most direct choice when you need positions for slicing, replacing, or reporting.
Working with Multidimensional Arrays
For two or more dimensions, np.where returns one array per axis. That is useful when you want row indices and column indices separately.
If you want coordinate pairs instead of separate arrays, combine them with zip or use np.argwhere.
This form is easier to read when iterating over matching cells.
Using np.argwhere for Coordinate Pairs
np.argwhere returns one row per match, where each row contains the full index coordinate. That makes it convenient for inspection and loops.
Compared with np.where, this structure is often easier to pass through logging code or convert into Python tuples.
Boolean Masks and np.flatnonzero
Sometimes you do not need multidimensional coordinates at all. You only need the positions from the flattened view of the array. In that case, np.flatnonzero is compact and fast to read.
This is useful when a downstream function works with flattened arrays, but it is a poor fit if you later need row and column locations.
Choosing the Right Result Shape
The correct function depends on how the indices will be used.
- Use
np.where(array == 0)[0]for one-dimensional arrays. - Use
rows, cols = np.where(array == 0)when axis-specific indices matter. - Use
np.argwhere(array == 0)when coordinate pairs are easier to handle. - Use
np.flatnonzero(array == 0)when flattening is already part of the workflow.
The core operation is always the same: create a boolean mask and convert it into indices. Most mistakes come from choosing a return format that does not match the next step in the pipeline.
Common Pitfalls
- Forgetting that
np.wherereturns a tuple. In a one-dimensional case, use[0]to extract the actual index array. - Comparing floating-point results to exact zero after arithmetic. Use
np.isclosewhen rounding error is possible. - Using flattened positions when you really need row and column coordinates.
np.flatnonzeroloses dimension structure. - Converting large result arrays to Python lists too early. Keep them as NumPy arrays while doing array operations.
- Expecting
argwhereandwhereto return the same shape. They represent the same matches in different formats.
Summary
- NumPy finds zero indices by turning
array == 0into a boolean mask. - '
np.whereis the standard tool for direct index lookup.' - '
np.argwhereis clearer when you want full coordinates for each match.' - '
np.flatnonzerois useful only when flattened indexing is acceptable.' - Matching the output format to the next processing step avoids unnecessary conversions.
Related reading
- Find most frequent value in SQL column
- Find nearest latitude/longitude with an SQL query
- Find nearest value in numpy array
- Find out which features are collinear in a dataset
- Find intersection of two nested lists?
- Find kth smallest element in a binary search tree in Optimum way
- Find non-common elements in lists
- Find object in list that has attribute equal to some value that meets any condition

DSA Fundamentals
Master algorithmic patterns and data structures through hands-on LeetCode-style problems - from arrays and hashing to dynamic programming and advanced graphs.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
ML System Design practice on Codemia
Design recommenders, ranking systems and training pipelines the way ML interviews actually ask for them, with worked solutions.