Counting with boolean arrays in NumPy - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
We want to understand how the time to count True values in a boolean array changes as the array grows.
How does the work needed grow when the array gets bigger?
Analyze the time complexity of the following code snippet.
import numpy as np
arr = np.random.choice([True, False], size=1000)
count_true = np.sum(arr)
print(count_true)
This code creates a boolean array and counts how many values are True.
- Primary operation: Summing all elements in the boolean array.
- How many times: Once over all elements, so the number of elements times.
Counting True values means checking each element once.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 10 checks |
| 100 | 100 checks |
| 1000 | 1000 checks |
Pattern observation: The work grows directly with the number of elements.
Time Complexity: O(n)
This means the time to count True values grows linearly as the array size grows.
[X] Wrong: "Counting True values is instant regardless of array size."
[OK] Correct: The program must look at each element at least once to know if it is True or False, so time grows with array size.
Understanding how counting works helps you explain efficiency clearly and shows you know how data size affects performance.
"What if we used a sparse representation for the boolean array? How would the time complexity change?"
Practice
arr = np.array([True, False, True])What is
arr.sum()?Solution
Step 1: Understand boolean values in NumPy
In NumPy, True is treated as 1 and False as 0 when summed.Step 2: Sum the boolean array
Summing[True, False, True]is 1 + 0 + 1 = 2.Final Answer:
Counts how many True values are in the array -> Option CQuick Check:
True count = 2 [OK]
- Thinking sum counts False values
- Believing sum returns array length
- Expecting an error when summing booleans
arr = np.array([1, 2, 3, 4]) are greater than 2 using boolean arrays?Solution
Step 1: Create boolean array for condition
arr > 2creates a boolean array: [False, False, True, True].Step 2: Sum the boolean array correctly
We must sum the boolean array, so use parentheses:(arr > 2).sum().Final Answer:
(arr > 2).sum() -> Option AQuick Check:
Correct syntax uses parentheses [OK]
- Missing parentheses causing wrong order
- Using sum() on condition without parentheses
- Confusing comparison and sum order
import numpy as np arr = np.array([5, 3, 8, 1, 6]) count = (arr % 2 == 0).sum() print(count)
Solution
Step 1: Create boolean array for even numbers
arr % 2 == 0checks which elements are even: [False, False, True, False, True].Step 2: Sum True values to count evens
Sum is 0 + 0 + 1 + 0 + 1 = 2.Final Answer:
2 -> Option DQuick Check:
Count of even numbers = 2 [OK]
- Counting odd numbers instead
- Forgetting to use parentheses
- Misunderstanding modulo operator
arr are less than 10, but it raises an error. What is the error and how to fix it?import numpy as np arr = np.array([7, 12, 5, 20]) count = arr < 10.sum() print(count)
Solution
Step 1: Identify the error in expression
10.sum()is invalid because 10 is an integer, not an array.Step 2: Correct the syntax to sum boolean array
Use parentheses to sum the boolean array:(arr < 10).sum().Final Answer:
Error: 10.sum() is invalid; fix by using (arr < 10).sum() -> Option BQuick Check:
Parentheses needed before sum() [OK]
- Calling sum() on number instead of boolean array
- Confusing comparison and sum order
- Ignoring error message details
data = np.array([[3, 7, 2], [5, 1, 8], [6, 4, 9]]), how can you count how many elements are greater than 5 across the entire array?Solution
Step 1: Create boolean array for elements > 5
data > 5creates a boolean array marking elements greater than 5.Step 2: Sum True values to count elements
Use(data > 5).sum()to count all True values in the 2D array.Final Answer:
(data > 5).sum() -> Option AQuick Check:
Sum boolean mask counts elements > 5 [OK]
- Using sum() on data directly
- Trying to use count() method on NumPy array
- Using non-existent np.count() function
