We use combining fancy and slice indexing to pick specific rows or columns and also select ranges of data at the same time. This helps us get exactly the data we want from a big table or array.
Combining fancy and slice indexing in NumPy
array[fancy_index, slice]
# or
array[slice, fancy_index]Fancy indexing means using a list or array of indices to pick specific elements.
Slice means selecting a continuous range using start:stop:step.
import numpy as np arr = np.arange(16).reshape(4,4) rows = [0, 2] cols = slice(1, 3) result = arr[rows, cols] print(result)
arr = np.arange(20).reshape(5,4) cols = [1, 3] rows = slice(2, 5) result = arr[rows, cols] print(result)
This program creates a 5x5 grid of numbers. It picks rows 1, 3, and 4 using a list (fancy indexing) and columns 2 to 4 using a slice. Then it prints the original array and the selected part.
import numpy as np # Create a 5x5 array with numbers 0 to 24 arr = np.arange(25).reshape(5, 5) # Fancy index: select rows 1, 3, and 4 rows = [1, 3, 4] # Slice: select columns from 2 to 4 (2, 3, 4) cols = slice(2, 5) # Combine fancy indexing for rows and slice for columns selected = arr[rows, cols] print("Original array:\n", arr) print("\nSelected rows and columns:\n", selected)
When combining fancy and slice indexing, the fancy index always applies to the first dimension you specify.
The result shape depends on the fancy index length and the slice length.
Mixing fancy and slice indexing is faster than looping over elements.
Fancy indexing uses lists or arrays of indices to pick specific rows or columns.
Slices select continuous ranges of rows or columns.
Combining them lets you pick exact rows and ranges of columns (or vice versa) easily.
Practice
arr[[0, 2], 1:4] selects:Solution
Step 1: Understand fancy indexing for rows
The fancy index[0, 2]selects rows 0 and 2 specifically.Step 2: Understand slice indexing for columns
The slice1:4selects columns starting at 1 up to but not including 4, so columns 1, 2, and 3.Final Answer:
Rows 0 and 2, columns 1 to 3 -> Option CQuick Check:
Fancy rows + slice columns = selected subarray [OK]
- Confusing rows and columns in indexing
- Forgetting slice end is exclusive
- Mixing up fancy and slice roles
arr?Solution
Step 1: Identify fancy indexing for rows
To select rows 1 and 3, use fancy indexing with a list:[1, 3].Step 2: Use slice for columns
To select columns 2 to 4, use slice2:5(end exclusive).Final Answer:
arr[[1, 3], 2:5] -> Option AQuick Check:
Fancy rows + slice columns syntax correct [OK]
- Using commas inside fancy index list
- Using slice inside list brackets
- Incorrect slice end index
import numpy as np
arr = np.array([[10, 20, 30, 40],
[50, 60, 70, 80],
[90, 100, 110, 120],
[130, 140, 150, 160]])
print(arr[[1, 3], 1:3])What is the output?
Solution
Step 1: Select rows using fancy indexing
Rows 1 and 3 are:
[50, 60, 70, 80]
[130, 140, 150, 160]Step 2: Select columns 1 to 2 (slice 1:3)
Columns 1 and 2 for these rows are:
Row 1: 60, 70
Row 3: 140, 150Final Answer:
[[ 60 70] [140 150]] -> Option BQuick Check:
Fancy rows + slice columns output matches [OK]
- Selecting wrong rows or columns
- Including column 3 by mistake
- Confusing row and column indices
import numpy as np arr = np.arange(16).reshape(4,4) result = arr[1:3, [0, 2]] print(result)
Solution
Step 1: Understand slice and fancy indexing combination
Slice1:3selects rows 1 and 2. Fancy index[0, 2]selects columns 0 and 2.Step 2: Check if code runs and output
This combination is valid in NumPy and prints the selected subarray without error.Final Answer:
It prints rows 1 and 2 with columns 0 and 2 correctly -> Option AQuick Check:
Slice rows + fancy columns works fine [OK]
- Thinking slice and fancy indexing cannot mix
- Confusing which axis uses slice or fancy
- Expecting an error when code is valid
arr. You want to select rows 0, 2, and 3, but only columns 1 to 3 inclusive. Which code correctly does this?Solution
Step 1: Identify fancy indexing for rows
Rows 0, 2, and 3 are selected using fancy indexing:[0, 2, 3].Step 2: Use slice for columns 1 to 3 inclusive
Slice1:4selects columns 1, 2, and 3 (end index exclusive).Final Answer:
arr[[0, 2, 3], 1:4] -> Option DQuick Check:
Fancy rows + slice columns selects correct subarray [OK]
- Using slice for rows instead of fancy list
- Using fancy list for columns incorrectly
- Off-by-one error in slice end index
Ready to prove it?
Pass the test and this pattern moves unknown
