Bird
Raised Fist0
NumPydata~5 mins

Slicing rows and columns in NumPy - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Slicing rows and columns
O(1)
Understanding Time Complexity

We want to understand how the time to slice parts of a numpy array changes as the array gets bigger.

Specifically, how does selecting rows or columns affect the work done?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.

import numpy as np

arr = np.random.rand(1000, 1000)

# Slice first 10 rows and all columns
slice_rows = arr[:10, :]

# Slice all rows and first 10 columns
slice_cols = arr[:, :10]

This code creates a large 2D array and slices a small part of rows or columns from it.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Adjusting array metadata (shape, strides, base pointer).
  • How many times: Constant time; no traversal or copying of elements.
How Execution Grows With Input

Slicing creates a view (not a copy), so time is independent of array size or slice size.

Input Size (n x n)Slice Time
10 x 10O(1)
100 x 100O(1)
1000 x 1000O(1)

Pattern observation: Constant time regardless of array or slice dimensions.

Final Time Complexity

Time Complexity: O(1)

Slicing returns a view sharing the same data; only metadata is updated in constant time.

Common Mistake

[X] Wrong: "Slicing copies elements, so time grows with slice size (e.g., O(n))."

[OK] Correct: Numpy slicing creates a view without copying data; access is lazy until modification.

Interview Connect

Knowing slicing is O(1) helps optimize data pipelines; use .copy() explicitly only when needed.

Self-Check

"What if we slice a square block of size k x k (k = n/2)? How would the time complexity change?"

Answer: Still O(1); view creation is always constant time.

Practice

(1/5)
1. What does the slicing notation array[1:3, 0:2] do on a 2D NumPy array?
easy
A. Selects rows 1 and 2, and columns 0 and 1
B. Selects rows 0 to 3 and columns 0 to 2
C. Selects rows 1 to 3 and columns 0 to 2
D. Selects rows 1 and 3, and columns 0 and 2

Solution

  1. Step 1: Understand row slicing 1:3

    This means select rows starting at index 1 up to but not including index 3, so rows 1 and 2.
  2. Step 2: Understand column slicing 0:2

    This means select columns starting at index 0 up to but not including index 2, so columns 0 and 1.
  3. Final Answer:

    Selects rows 1 and 2, and columns 0 and 1 -> Option A
  4. Quick Check:

    Slice end is excluded = A [OK]
Hint: Remember end index is excluded in slicing [OK]
Common Mistakes:
  • Including the end index in the slice
  • Confusing rows and columns order
  • Using commas incorrectly in slicing
2. Which of the following is the correct syntax to select all rows and columns 2 to 4 (inclusive start, exclusive end) from a NumPy array named arr?
easy
A. arr[2:4, :]
B. arr[:, 2:5]
C. arr[2:5, :]
D. arr[:, 2:4]

Solution

  1. Step 1: Identify rows and columns in slicing

    The first index before comma is rows, second is columns.
  2. Step 2: Select all rows and columns 2 to 4

    All rows means :, columns 2 to 4 means 2:5 because end is excluded.
  3. Final Answer:

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

    All rows = :, columns 2 to 4 = 2:5 [OK]
Hint: Use ':' for all rows or columns [OK]
Common Mistakes:
  • Swapping rows and columns in slicing
  • Using wrong end index in slice
  • Missing colon for all rows or columns
3. Given the NumPy array:
import numpy as np
arr = np.array([[10, 20, 30, 40],
                [50, 60, 70, 80],
                [90, 100, 110, 120]])
print(arr[0:2, 1:3])

What is the output?
medium
A. [[50 60] [90 100]]
B. [[10 20 30] [50 60 70]]
C. [[20 30 40] [60 70 80]]
D. [[20 30] [60 70]]

Solution

  1. Step 1: Slice rows 0 to 1

    Rows 0 and 1 are selected (indices 0 and 1), so first two rows.
  2. Step 2: Slice columns 1 to 2

    Columns 1 and 2 are selected (indices 1 and 2), so second and third columns.
  3. Final Answer:

    [[20 30] [60 70]] -> Option D
  4. Quick Check:

    Rows 0-1 and columns 1-2 slice = A [OK]
Hint: Remember slicing excludes the end index [OK]
Common Mistakes:
  • Including the end index in slice
  • Mixing up rows and columns
  • Printing the whole array instead of slice
4. What is wrong with this code snippet to select rows 1 to 3 and columns 0 to 2 from a NumPy array data?
slice = data[1:3, 0:2]
medium
A. It selects rows 1 and 2 only, not row 3
B. It causes a syntax error due to variable name 'slice'
C. It selects columns 0, 1, and 2 instead of 0 and 1
D. It selects rows 0 to 3 instead of 1 to 3

Solution

  1. Step 1: Examine row slicing 1:3

    In Python/NumPy slicing, the end index is exclusive, so 1:3 selects rows 1 and 2 only, not row 3.
  2. Step 2: Column slicing 0:2

    Selects columns 0 and 1 (excludes 2).
  3. Final Answer:

    It selects rows 1 and 2 only, not row 3 -> Option A
  4. Quick Check:

    End index excluded in slicing = A [OK]
Hint: Slicing excludes the end index [OK]
Common Mistakes:
  • Assuming slice includes end index
  • Ignoring variable naming conflicts
  • Confusing rows and columns in slicing
5. You have a 5x5 NumPy array arr. How do you extract the middle 3 rows and middle 3 columns as a new array?
hard
A. arr[0:3, 0:3]
B. arr[2:5, 2:5]
C. arr[1:4, 1:4]
D. arr[1:3, 1:3]

Solution

  1. Step 1: Identify middle rows in 5x5 array

    Rows are indexed 0 to 4. Middle 3 rows are indices 1, 2, 3, so slice 1:4.
  2. Step 2: Identify middle columns similarly

    Columns 1, 2, 3 are middle 3 columns, so slice 1:4.
  3. Final Answer:

    arr[1:4, 1:4] -> Option C
  4. Quick Check:

    Middle 3 rows and columns = 1:4 slice [OK]
Hint: Count indices carefully; middle 3 means 1 to 3 inclusive [OK]
Common Mistakes:
  • Using wrong slice end index
  • Selecting too few or too many rows/columns
  • Confusing zero-based indexing
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