Bird
Raised Fist0
NumPydata~10 mins

Boolean indexing for filtering in NumPy - Interactive Code Practice

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to filter the array and keep only values greater than 5.

NumPy
import numpy as np
arr = np.array([3, 7, 2, 9, 5])
filtered = arr[arr [1] 5]
print(filtered)
Drag options to blanks, or click blank then click option'
A>
B<
C==
D<=
Attempts:
3 left
💡 Hint
Common Mistakes
Using == instead of > which selects only values equal to 5.
Using < which selects values less than 5.
2fill in blank
medium

Complete the code to filter the array and keep only even numbers.

NumPy
import numpy as np
arr = np.array([1, 4, 7, 8, 10])
even = arr[arr [1] 2 == 0]
print(even)
Drag options to blanks, or click blank then click option'
A+
B//
C**
D%
Attempts:
3 left
💡 Hint
Common Mistakes
Using floor division // which does not check for evenness.
Using exponentiation ** which is unrelated.
3fill in blank
hard

Fix the error in the code to filter values less than 10.

NumPy
import numpy as np
arr = np.array([12, 5, 8, 15, 3])
filtered = arr[arr [1] 10]
print(filtered)
Drag options to blanks, or click blank then click option'
A=>
B<
C==
D!=
Attempts:
3 left
💡 Hint
Common Mistakes
Using invalid operator => which causes syntax error.
Using == which selects only values equal to 10.
4fill in blank
hard

Fill both blanks to create a dictionary of words and their lengths for words longer than 3 characters.

NumPy
words = ['cat', 'elephant', 'dog', 'lion']
lengths = {word: [1] for word in words if [2]
print(lengths)
Drag options to blanks, or click blank then click option'
Alen(word)
Bword
Clen(word) > 3
Dword > 3
Attempts:
3 left
💡 Hint
Common Mistakes
Using word > 3 which compares string to number and causes error.
Using word instead of length in the dictionary values.
5fill in blank
hard

Fill all three blanks to create a dictionary with uppercase words as keys and their lengths as values, only for words longer than 4 characters.

NumPy
words = ['apple', 'bat', 'carrot', 'dog']
result = { [1]: [2] for w in words if [3] }
print(result)
Drag options to blanks, or click blank then click option'
Aw.upper()
Blen(w)
Clen(w) > 4
Dw.lower()
Attempts:
3 left
💡 Hint
Common Mistakes
Using w.lower() instead of uppercase for keys.
Filtering with len(w) >= 4 which includes words of length 4.

Practice

(1/5)
1. What does boolean indexing in numpy allow you to do?
easy
A. Select elements from an array based on True/False conditions
B. Sort an array in ascending order
C. Change the data type of an array
D. Calculate the sum of all elements in an array

Solution

  1. Step 1: Understand boolean indexing concept

    Boolean indexing uses a True/False array to pick elements from another array.
  2. Step 2: Compare with other options

    Sorting, changing data type, and summing are different numpy operations, not boolean indexing.
  3. Final Answer:

    Select elements from an array based on True/False conditions -> Option A
  4. Quick Check:

    Boolean indexing = filtering by True/False [OK]
Hint: Boolean indexing picks elements where condition is True [OK]
Common Mistakes:
  • Confusing boolean indexing with sorting
  • Thinking it changes data types
  • Assuming it calculates sums
2. Which of the following is the correct syntax to filter array arr for values greater than 5 using boolean indexing?
easy
A. arr > 5[arr]
B. arr[arr > 5]
C. arr.filter(arr > 5)
D. arr[arr < 5]

Solution

  1. Step 1: Identify correct boolean indexing syntax

    In numpy, filtering uses arr[condition] where condition is a boolean array.
  2. Step 2: Check each option

    arr[arr > 5] uses correct syntax. arr > 5[arr] is invalid syntax. arr.filter(arr > 5) is not a numpy method. arr[arr < 5] filters for less than 5, not greater.
  3. Final Answer:

    arr[arr > 5] -> Option B
  4. Quick Check:

    Correct syntax is arr[condition] [OK]
Hint: Use arr[condition] to filter arrays in numpy [OK]
Common Mistakes:
  • Placing condition outside brackets
  • Using non-existent filter method
  • Mixing up greater than and less than
3. What is the output of the following code?
import numpy as np
arr = np.array([2, 7, 4, 9, 1])
filtered = arr[arr % 2 == 1]
medium
A. [7 4 9]
B. [2 4]
C. [7 9 1]
D. [2 7 4 9 1]

Solution

  1. Step 1: Understand the condition arr % 2 == 1

    This condition selects odd numbers because odd numbers have remainder 1 when divided by 2.
  2. Step 2: Apply condition to array elements

    Elements 7, 9, and 1 are odd, so they are selected.
  3. Final Answer:

    [7 9 1] -> Option C
  4. Quick Check:

    Filter odd numbers = [7 9 1] [OK]
Hint: Use modulo (%) to filter odd/even numbers [OK]
Common Mistakes:
  • Selecting even numbers instead of odd
  • Including all elements without filtering
  • Misunderstanding modulo operator
4. The following code throws an error. What is the mistake?
import numpy as np
arr = np.array([10, 15, 20, 25])
filtered = arr[arr > 15 and arr < 25]
medium
A. Using 'and' instead of '&' for element-wise condition
B. Missing parentheses around conditions
C. Using 'or' instead of 'and'
D. Array is not defined properly

Solution

  1. Step 1: Identify boolean operator error

    In numpy, element-wise logical operations require '&' instead of Python's 'and'.
  2. Step 2: Understand why 'and' causes error

    'and' expects single boolean, but arr > 15 and arr < 25 returns arrays, causing TypeError.
  3. Final Answer:

    Using 'and' instead of '&' for element-wise condition -> Option A
  4. Quick Check:

    Use '&' for element-wise logical AND [OK]
Hint: Use & with parentheses for multiple conditions [OK]
Common Mistakes:
  • Using 'and' instead of '&' in numpy conditions
  • Forgetting parentheses around each condition
  • Assuming 'or' works like '|'
5. Given a numpy array data = np.array([3, 6, 9, 12, 15, 18]), how would you filter values that are divisible by 3 but not by 6 using boolean indexing?
hard
A. data[(data % 3 == 0) & (data % 6 == 0)]
B. data[(data % 3 == 0) | (data % 6 != 0)]
C. data[(data % 3 != 0) & (data % 6 == 0)]
D. data[(data % 3 == 0) & (data % 6 != 0)]

Solution

  1. Step 1: Define conditions for filtering

    We want numbers divisible by 3 (data % 3 == 0) but not divisible by 6 (data % 6 != 0).
  2. Step 2: Combine conditions with element-wise AND

    Use '&' to combine both conditions inside parentheses for correct boolean indexing.
  3. Step 3: Apply combined condition to data array

    data[(data % 3 == 0) & (data % 6 != 0)] correctly applies both conditions with '&'. Others use wrong operators or conditions.
  4. Final Answer:

    data[(data % 3 == 0) & (data % 6 != 0)] -> Option D
  5. Quick Check:

    Use & and parentheses for combined conditions [OK]
Hint: Combine conditions with & and parentheses for filtering [OK]
Common Mistakes:
  • Using | instead of & for AND condition
  • Mixing up divisibility conditions
  • Forgetting parentheses around each condition