Why indexing matters in NumPy - Performance Analysis
We want to see how fast numpy operations run when we pick parts of data using indexing.
How does the way we select data affect the time it takes?
Analyze the time complexity of the following code snippet.
import numpy as np
arr = np.arange(1000000)
# Access a single element
single = arr[500000]
# Access a slice
slice_ = arr[100000:200000]
# Access with a boolean mask
mask = arr % 2 == 0
filtered = arr[mask]
This code shows three ways to get data from a large array: one element, a slice, and a filtered subset.
Look at what repeats when we pick data.
- Primary operation: Accessing elements by index or condition.
- How many times: For single element, once; for slice, many times equal to slice size; for mask, once per element to check condition.
How does time grow when array size grows?
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Single: 1, Slice: up to 10, Mask: 10 |
| 100 | Single: 1, Slice: up to 100, Mask: 100 |
| 1000 | Single: 1, Slice: up to 1000, Mask: 1000 |
Picking one element stays fast no matter size. Picking slices or filtered data grows with how much we take or check.
Time Complexity: O(k) where k is the number of elements accessed or checked
This means time grows with how many elements you pick or test, not the total array size if you pick just one.
[X] Wrong: "Accessing any element in numpy always takes the same time regardless of how many elements we get."
[OK] Correct: Accessing one element is fast, but getting many elements or filtering means more work and more time.
Knowing how indexing affects speed helps you write faster code and explain your choices clearly in real projects.
"What if we used fancy indexing with a list of random indices? How would the time complexity change?"
Practice
Solution
Step 1: Understand the purpose of indexing
Indexing is used to access specific parts of an array, like single elements or slices.Step 2: Compare with other options
Creating new arrays, sorting, or converting are different operations, not indexing.Final Answer:
Select specific elements or slices from an array -> Option BQuick Check:
Indexing = selecting parts of array [OK]
- Confusing indexing with array creation
- Thinking indexing sorts data
- Mixing indexing with data type conversion
arr?Solution
Step 1: Recall NumPy indexing syntax
NumPy arrays use square brackets with zero-based indices to access elements.Step 2: Check each option
Onlyarr[0]uses correct square brackets and zero index; others are invalid syntax or methods.Final Answer:
arr[0] -> Option CQuick Check:
First element = arr[0] [OK]
- Using parentheses instead of brackets
- Using curly braces which are invalid
- Assuming methods like .first() exist
import numpy as np arr = np.array([10, 20, 30, 40, 50]) print(arr[1:4])
Solution
Step 1: Understand slicing syntax
The slicearr[1:4]selects elements from index 1 up to but not including 4.Step 2: Identify elements at these indices
Indices 1, 2, 3 correspond to values 20, 30, 40.Final Answer:
[20 30 40] -> Option AQuick Check:
Slice 1:4 excludes index 4 [OK]
- Including the end index element
- Confusing zero-based indexing
- Printing the whole array by mistake
import numpy as np arr = np.array([1, 2, 3, 4, 5]) print(arr[5])
Solution
Step 1: Check array length and indexing
The array has 5 elements with indices 0 to 4; index 5 is invalid.Step 2: Identify error cause
Accessingarr[5]causes an IndexError because it is out of bounds.Final Answer:
Index 5 is out of bounds for the array -> Option AQuick Check:
Index must be less than array length [OK]
- Trying to access index equal to array length
- Confusing array length with max index
- Assuming Python allows out-of-range indexing
arr = np.array([[1,2,3],[4,5,6],[7,8,9]]), which indexing expression will select the second column as a 1D array?Solution
Step 1: Understand 2D array indexing
In 2D arrays,arr[:, 1]means all rows, column index 1 (second column).Step 2: Check other options
arr[1, :]selects second row,arr[1]is same as second row,arr[:, 2]selects third column.Final Answer:
arr[:, 1] -> Option DQuick Check:
All rows, column 1 = second column [OK]
- Mixing row and column indices
- Using single index for 2D array
- Selecting wrong column index
Ready to prove it?
Pass the test and this pattern moves unknown
