• Post author:
• Post category:NumPy / Python

In NumPy, the `nonzero()` function is used to return the indices (the index numbers or index positions) of the elements that are non-zero in a given array. It is particularly useful when you want to find the indices of non-zero elements in an array without actually iterating through the array manually. It returns a tuple of arrays, one for each dimension of arr, containing the indices of the non-zero elements in that dimension.

## 1. Quick Examples of NumPy nonzero() Function

If you are in a hurry, below are some quick examples of how to use Python NumPy nonzero() function. For more creators of ndarray refer NumPy Tutorial.

``````
# Quick examples of nonzero() function

# Example 1: Indices of non zero elements
arr = np.array([8, 23, 45, 0, 60, 0, 85, 0, 101])
arr2 = np.nonzero(arr)

# Example 2: All nonzero elements
arr3 = arr[arr2]

# Example 3: Index of all elements
# Which are greater than 50
arr2 = np.nonzero(arr > 50)

# Example 4: Use nonzero() function to 2-d array
arr = np.array([[4, 0, 0], [0, 6, 0], [-7, 15, 0]])
arr2 = np.nonzero(arr)

# Example 5: Get the corresponding non-zero number
arr3 = arr[np.nonzero(arr)]

# Example 6: Use numpy.transpose() function
# To indices of non-zero number
arr = np.array([[4, 0, 0], [0, 6, 0], [-7, 15, 0]])
arr3 = np.transpose(np.nonzero(arr))
``````

## 2. Syntax of NumPy nonzero()

Following is the syntax to create` numpy.nonzero()` function.

``````
# Python numpy.nonzero() Syntax
numpy.nonzero(arr)
``````

## 2.1 Parameters of NumPy nonzeros()

• `arr : `This is the input array. It can be a 1-dimensional or multi-dimensional array.

## 2.2 Return Value

It returns Indices of elements that are non-zero.

## 3. Get Indices of nonzero Elements Use nonzero()

If you want to directly get the indices of non-zero elements using `numpy.nonzero()` function. Here, `arr2` is a tuple containing one array, which represents the indices of the non-zero elements in the original array `arr`. The output indicates that non-zero elements are at positions 0, 1, 2, 4, 6, and 8 in the array. You can also use NumPy `nonzero() `function to get the index of all elements which are non-zero.

``````
# Import numpy
import numpy as np

# Create one-dimensional array with nonzero
arr = np.array([8, 23, 45, 0, 60, 0, 85, 0, 101])
print("Original array:\n",arr)

# Indices of non zero elements
arr2 = np.nonzero(arr)
print("Indices of non-zero elements:\n",arr2)

# Output:
# Original array:
#  [  8  23  45   0  60   0  85   0 101]
# Indices of non-zero elements:
# (array([0, 1, 2, 4, 6, 8], dtype=int64),)

# All nonzero elements
arr3 = arr[arr2]
print("All nonzero elements:\n", arr3)
``````

Yields below output.

To find the indices of elements in a NumPy array that are greater than 50, you can use boolean indexing. Here, `arr2` is a tuple containing one array, which represents the indices of elements in the original array `arr` that are greater than 50. The output indicates that elements greater than 50 are at positions 4, 6, and 8 in the array.

``````
# Index of all elements which are greater than 50
arr2 = np.nonzero(arr > 50)
print("Indices of elements greater than 50:\n",arr2)

# Output:
# Indices of elements greater than 50:
# (array([4, 6, 8], dtype=int64),)
``````

## 4. Use nonzero() Function to 2-D Array

You can use the `numpy.nonzero()` function to find the indices of non-zero elements in a two-dimensional NumPy array. For instance, the first array represents the row indices, and the second array represents the column indices of the non-zero elements in the original two-dimensional array `arr`.

``````
import numpy as np

# Create two-dimensional array with nonzero
arr = np.array([[4, 0, 0], [0, 6, 0], [-7, 15, 0]])

# Use nonzero() function to 2-d array
arr2 = np.nonzero(arr)
print("Indices of non-zero elements:\n",arr2)

# Output:
Indices of non-zero elements:
(array([0, 1, 2, 2], dtype=int64), array([0, 1, 0, 1], dtype=int64))

# Get the corresponding non-zero number
arr3 = arr[np.nonzero(arr)]
print("All nonzero elements:\n", arr3)

# Output:
# All nonzero elements:
#  [ 4  6 -7 15]
``````

If you want to access the non-zero elements directly, you can use these indices. Now, `arr3` contains the values of the non-zero elements in the original two-dimensional array.

## 5. Use numpy.transpose() Function to Indices of non-zero Number

To use `numpy.transpose()` to get the indices of non-zero elements in a 2D array, you can first use `numpy.nonzero()` to obtain the indices and then transpose the result.

In the below example, `arr2` is a tuple containing two arrays representing the row and column indices of non-zero elements. Using `numpy.transpose()`, you transpose these indices, so each row now represents a pair of (row, column) indices for the non-zero elements in the original array.

``````
# Create two-dimensional array with nonzero
arr = np.array([[4, 0, 0], [0, 6, 0], [-7, 15, 0]])

# Use numpy.transpose() function to indices of non-zero number
arr2 = np.transpose(np.nonzero(arr))
print("Transposed indices of non-zero elements:\n",arr2)

# Output:
# Transposed indices of non-zero elements:
#  [[0 0]
#  [1 1]
#  [2 0]
#  [2 1]]
``````

What does the numpy.nonzero() function do?

The `numpy.nonzero()` function in NumPy returns the indices of elements that are non-zero in an array. It is particularly useful for finding the positions of non-zero elements without manually iterating through the array.

How does the function handle multi-dimensional arrays?

For multi-dimensional arrays, `numpy.nonzero()` returns a tuple of arrays, where each array corresponds to the indices along a particular dimension of the non-zero elements.

Can I use numpy.nonzero() to find the indices of elements greater than a certain value?

You can use `numpy.nonzero()` in combination with boolean indexing to find the indices of elements that are greater than a certain value. For example, `arr > 10` creates a boolean array where each element is `True` if the corresponding element in `arr` is greater than 10, and `False` otherwise. `np.nonzero()` then returns the indices of the `True` values, giving you the indices of elements greater than 10 in the original array.

How do I access the non-zero elements using the indices obtained from numpy.nonzero()?

To access the non-zero elements using the indices obtained from `numpy.nonzero()`, you can use the indices to index the original array.

How can I use numpy.transpose() with numpy.nonzero()?

You can use `numpy.transpose()` to swap the row and column indices obtained from `numpy.nonzero()`. This can be useful for certain applications, such as when you want to transform the indices for further processing.

Does numpy.nonzero() work for arrays of any data type?

`numpy.nonzero()` works for arrays of any data type. It is designed to find the indices of non-zero elements in an array regardless of the data type. Whether your array contains integers, floats, or other types, `numpy.nonzero()` will behave the same way.

## Conclusion

In this article, I have explained how to use Python NumPy `nonzero()` function using indices of elements that are non-zero with examples.

Happy Learning!!