w3resource

Mastering numpy.where for Array Condition Handling


Comprehensive Guide to numpy.where in Python

numpy.where is a powerful NumPy function used to return indices or values based on a condition. It can operate in two modes: finding indices where a condition is True, or selecting elements based on conditions, making it an essential tool for data manipulation and analysis.


Syntax:

numpy.where(condition, [x, y])

Parameters:

  • condition (array_like, bool):
    A boolean array or condition that evaluates to True or False for each element.
  • x, y (array_like, optional):
    Arrays of values to return based on the condition. When provided:
    • Returns x where the condition is True.
    • Returns y where the condition is False.

Returns:

  • ndarray or tuple of ndarrays:
    • Without x and y: A tuple of arrays representing the indices where the condition is True.
    • With x and y: An array with elements from x or y based on the condition.

Examples:

Example 1: Find Indices Where Condition is True

Code:

import numpy as np

# Define an array
arr = np.array([10, 15, 20, 25, 30])
		
# Find indices where elements are greater than 20
indices = np.where(arr > 20)

# Print the indices
print("Indices where elements are greater than 20:", indices)

Output:

Indices where elements are greater than 20: (array([3, 4], dtype=int64),)

Explanation:

    This example identifies the positions of elements in the array that satisfy the condition arr > 20. The output is a tuple of indices.


Example 2: Replace Elements Based on a Condition

Code:

import numpy as np

# Define an array
arr = np.array([1, 2, 3, 4, 5])

# Replace elements greater than 3 with -1, keep others unchanged
modified_arr = np.where(arr > 3, -1, arr)

# Print the modified array
print("Modified array:", modified_arr)

Output:

Modified array: [ 1  2  3 -1 -1]

Explanation

This replaces elements greater than 3 with -1 and leaves the rest unchanged by specifying x and y.


Example 3: Apply Conditional Selection in 2D Arrays

Code:

import numpy as np

# Define a 2D array
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# Replace elements less than 5 with 0
result = np.where(arr < 5, 0, arr)

# Print the result
print("2D array after applying condition:\n", result)

Output:

2D array after applying condition:
 [[0 0 0]
 [0 5 6]
 [7 8 9]]

Explanation:

    This applies the condition to a 2D array, replacing all elements less than 5 with 0.


Example 4: Find Indices in Multidimensional Arrays

Code:

import numpy as np

# Define a 2D array
arr = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]])

# Find indices of elements greater than 50
indices = np.where(arr > 50)

# Print the result
print("Indices where elements are greater than 50:", indices)

Output:

Indices where elements are greater than 50: (array([1, 2, 2, 2], dtype=int64), array([2, 0, 1, 2], dtype=int64))

Explanation:

The indices are returned as a tuple of arrays, each corresponding to the coordinates along different dimensions.


Example 5: Combine Conditional Logic

Code:

import numpy as np

# Define an array
arr = np.array([10, 15, 20, 25, 30])

# Replace elements greater than 20 with 1, less than or equal to 20 with 0
binary_arr = np.where(arr > 20, 1, 0)

# Print the binary array
print("Binary array:", binary_arr)

Output:

Binary array: [0 0 0 1 1]

Explanation:

This example demonstrates conditional selection to create a binary array based on a condition.


Additional Notes:

    1. Performance: Using numpy.where is significantly faster than list comprehensions or Python loops for large datasets.

    2. Use Cases: Data preprocessing, feature engineering, matrix manipulation, and filtering.

    3. Broadcasting: Supports broadcasting, allowing operations on arrays of different shapes.

Practical Guides to NumPy Snippets and Examples.



Follow us on Facebook and Twitter for latest update.