Bird
Raised Fist0
NumPydata~20 mins

Strides and how data is accessed in NumPy - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Stride Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Understanding numpy array strides
What is the output of the following code showing the strides of a numpy array?
NumPy
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)
print(arr.strides)
A(12, 4)
B(8, 4)
C(24, 8)
D(4, 12)
Attempts:
2 left
💡 Hint
Remember that strides show the number of bytes to step in each dimension.
❓ data_output
intermediate
2:00remaining
Effect of transpose on strides
What are the strides of the array after transposing it?
NumPy
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)
arr_t = arr.T
print(arr_t.strides)
A(4, 12)
B(12, 4)
C(8, 16)
D(16, 8)
Attempts:
2 left
💡 Hint
Transpose swaps the axes and their strides.
🔧 Debug
advanced
2:00remaining
Why does this slicing not change strides as expected?
Consider this code: import numpy as np arr = np.arange(10) sliced = arr[::2] print(sliced.strides) Why does the stride value double compared to the original array?
NumPy
import numpy as np
arr = np.arange(10)
sliced = arr[::2]
print(sliced.strides)
ABecause numpy does not support stride changes on slicing.
BBecause strides always remain constant regardless of slicing.
CBecause the stride is the number of bytes to step, and it is multiplied by the step size in slicing.
DBecause slicing with step creates a view with the same stride multiplied by the step size.
Attempts:
2 left
💡 Hint
Think about how stride relates to step size in slicing.
🚀 Application
advanced
2:00remaining
Predicting memory layout from strides
Given a numpy array with shape (3, 4) and strides (32, 8), what is the dtype size in bytes?
A4 bytes
B8 bytes
C16 bytes
D32 bytes
Attempts:
2 left
💡 Hint
Stride for last dimension equals dtype size in bytes.
🧠 Conceptual
expert
3:00remaining
How does numpy use strides to access elements efficiently?
Which statement best explains how numpy uses strides to access elements in memory?
AStrides define the total size of the array in bytes and are unrelated to element access.
BStrides are used to copy data into new arrays for each operation to avoid modifying the original data.
CStrides are only used when arrays are contiguous and ignored otherwise.
DStrides tell numpy how many bytes to jump to move to the next element along each axis, enabling fast memory access without copying data.
Attempts:
2 left
💡 Hint
Think about how numpy avoids copying data when slicing or reshaping.

Practice

(1/5)
1. What do strides in a NumPy array represent?
easy
A. The number of bytes to jump to move to the next element in each dimension
B. The total number of elements in the array
C. The shape of the array
D. The data type of the array elements

Solution

  1. Step 1: Understand the definition of strides

    Strides indicate how many bytes NumPy moves in memory to access the next element along each dimension.
  2. Step 2: Differentiate from other array attributes

    Shape is the size per dimension, dtype is the data type, and total elements is the count, none describe memory jumps.
  3. Final Answer:

    The number of bytes to jump to move to the next element in each dimension -> Option A
  4. Quick Check:

    Strides = bytes jump per dimension [OK]
Hint: Strides = byte steps to next element per dimension [OK]
Common Mistakes:
  • Confusing strides with shape
  • Thinking strides represent element count
  • Mixing strides with data type size
2. Which of the following is the correct way to check the strides of a NumPy array arr?
easy
A. arr.strides()
B. arr.strides
C. arr.get_strides()
D. strides(arr)

Solution

  1. Step 1: Recall how strides are accessed in NumPy

    Strides is an attribute, not a method, so it is accessed without parentheses.
  2. Step 2: Evaluate each option

    arr.strides() and C use parentheses incorrectly; strides(arr) is not a valid function; arr.strides correctly accesses the attribute.
  3. Final Answer:

    arr.strides -> Option B
  4. Quick Check:

    Strides is an attribute, no parentheses [OK]
Hint: Use attribute, not method: arr.strides [OK]
Common Mistakes:
  • Using parentheses like a method
  • Trying non-existent functions
  • Confusing strides with shape attribute
3. Given the code:
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6]])
slice_arr = arr[:, 1:3]

What will slice_arr.strides most likely be if arr.strides is (24, 8)?
medium
A. (24, 16)
B. (24, 8) but reversed
C. (24, 8)
D. (24, 8) but with first stride changed to 8

Solution

  1. Step 1: Understand original strides meaning

    Original strides (24, 8) mean 24 bytes to move to next row, 8 bytes to next column.
  2. Step 2: Analyze slicing effect on strides

    Slicing [:, 1:3] uses step=1 for columns (equivalent to 1:3:1), so both row stride (24) and column stride (8) remain unchanged.
  3. Final Answer:

    (24, 8) -> Option C
  4. Quick Check:

    Step=1 slicing keeps strides unchanged [OK]
Hint: Step=1 slicing keeps strides unchanged [OK]
Common Mistakes:
  • Thinking non-zero start changes strides
  • Believing column slicing doubles stride
  • Confusing with step>1 strided slicing
4. Consider this code snippet:
import numpy as np
arr = np.arange(12).reshape(3,4)
sub_arr = arr[::2, ::-1]
print(sub_arr.strides)

It raises an error. What is the likely cause?
medium
A. Negative step in slicing causes invalid strides
B. Using step size 2 in slicing is not allowed
C. Slicing with negative step reverses strides but is valid
D. No error; code runs fine

Solution

  1. Step 1: Understand slicing with steps

    The code uses [::2, ::-1]: step=2 for rows (valid), step=-1 for columns (valid, reverses dimension).
  2. Step 2: Check if code runs

    NumPy supports all integer steps including negative; strides adjust (row *=2, col *=-1), no error occurs.
  3. Final Answer:

    No error; code runs fine -> Option D
  4. Quick Check:

    Negative step reverses strides, no error [OK]
Hint: Negative slice steps reverse strides, no error [OK]
Common Mistakes:
  • Assuming negative steps cause errors
  • Thinking step size 2 is invalid
  • Confusing stride reversal with error
5. You have a large 2D NumPy array data with shape (1000, 1000) and strides (8000, 8). You want to create a view that selects every 10th row and every 5th column without copying data. What will be the strides of this view?
hard
A. (80000, 40)
B. (8000, 8)
C. (8000, 40)
D. (80000, 8)

Solution

  1. Step 1: Understand original strides

    Original strides (8000, 8) mean 8000 bytes to move one row, 8 bytes to move one column.
  2. Step 2: Calculate new strides after slicing

    Selecting every 10th row multiplies row stride by 10 -> 8000*10=80000; every 5th column multiplies column stride by 5 -> 8*5=40.
  3. Final Answer:

    (80000, 40) -> Option A
  4. Quick Check:

    Stride scales by step size in slicing [OK]
Hint: Multiply strides by slice step size [OK]
Common Mistakes:
  • Forgetting to multiply strides by step size
  • Mixing row and column strides
  • Assuming strides stay unchanged after slicing
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard