np.expand_dims() and np.squeeze() in NumPy - Time & Space Complexity
We want to understand how the time to run np.expand_dims() and np.squeeze() changes as the size of the input array grows.
Specifically, how does adding or removing dimensions affect the work done?
Analyze the time complexity of the following code snippet.
import numpy as np
arr = np.random.rand(1000, 10)
expanded = np.expand_dims(arr, axis=1)
squeezed = np.squeeze(expanded, axis=1)
This code creates a 2D array, adds a new dimension, then removes that dimension.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Creating views of the array shape without copying data.
- How many times: The operations happen once each, no loops over elements.
Adding or removing dimensions does not involve touching each element, so the time stays almost the same as input grows.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | Very few operations, just shape change |
| 100 | Still very few operations, no element-wise work |
| 1000 | Same as before, no increase in element processing |
Pattern observation: The time does not grow with input size because no element-wise processing happens.
Time Complexity: O(1)
This means the time to add or remove a dimension stays constant no matter how big the array is.
[X] Wrong: "Adding or removing dimensions must take longer for bigger arrays because the data changes."
[OK] Correct: These functions only change the shape metadata, not the actual data, so the time does not depend on array size.
Knowing that some numpy operations are just shape changes helps you explain efficient data handling in real projects.
"What if we used a function that copies the array data instead of just changing shape? How would the time complexity change?"
Practice
np.expand_dims() do to a NumPy array?Solution
Step 1: Understand the function purpose
np.expand_dims()is used to add a new axis to an array, increasing its dimensions.Step 2: Compare with other options
Removing dimensions or flattening is done by other functions likenp.squeeze()orreshape(). Changing data type is unrelated.Final Answer:
Adds a new dimension at the specified axis -> Option AQuick Check:
np.expand_dims() = Adds dimension [OK]
- Confusing expand_dims with squeeze
- Thinking it changes data values
- Assuming it flattens the array
np.expand_dims() on array a?Solution
Step 1: Check the function signature
np.expand_dims(array, axis)requires the axis parameter to specify where to add the new dimension.Step 2: Identify correct axis value
Axis=1 adds the new dimension at position 1.np.expand_dims(a, 0)(positional) andnp.expand_dims(a, axis=0)add the dimension at position 0.np.expand_dims(a, axis=2)causes an AxisError since valid axes are -2 to 1 for a 1D array.Final Answer:
np.expand_dims(a, axis=1) -> Option CQuick Check:
Use axis=1 to add dimension at position 1 [OK]
- Omitting axis keyword and confusing position
- Using wrong axis number
- Mixing axis=0 and axis=1
np.squeeze() to arr = np.array([[[1], [2], [3]]])?Solution
Step 1: Check original shape
arrhas shape (1, 3, 1) because it is a 3D array with one element in first and last dimension.Step 2: Apply np.squeeze()
np.squeeze()removes all dimensions of size 1, so the first and last dimensions are removed, leaving shape (3,).Final Answer:
(3,) -> Option AQuick Check:
squeeze removes size 1 dims = (3,) [OK]
- Assuming squeeze removes only one dimension
- Confusing original shape with squeezed shape
- Thinking squeeze flattens the array
arr = np.array([1, 2, 3]), which code will cause an error?Solution
Step 1: Check original array shape
arrhas shape (3,), so it has 1 dimension.Step 2: Validate axis values for expand_dims
Valid axis values for adding a new dimension are between -2 and 1 (inclusive) because adding a dimension increases rank by 1. Axis=3 is out of bounds and causes an error.Final Answer:
np.expand_dims(arr, axis=3) causes error -> Option DQuick Check:
Axis out of range causes error [OK]
- Using axis larger than array ndim + 1
- Confusing axis indexing with array shape
- Assuming squeeze can cause error on 1D arrays
data with shape (5, 1). You want to prepare it for a machine learning model that expects input shape (5,). Which code correctly reshapes data using np.squeeze() and np.expand_dims()?Solution
Step 1: Understand the original shape and target shape
datashape is (5, 1). The model expects (5,), so we need to remove the extra dimension.Step 2: Use np.squeeze() to remove size 1 dimension
np.squeeze(data)removes the dimension of size 1, resulting in shape (5,). Adding dimensions again is unnecessary and would change shape incorrectly.Final Answer:
np.squeeze(data) -> Option BQuick Check:
Squeeze removes extra dims to match model input [OK]
- Adding dimensions instead of removing
- Using expand_dims unnecessarily
- Not matching model expected input shape
Ready to prove it?
Pass the test and this pattern moves unknown
