Multi-dimensional fancy indexing helps you pick specific elements from a grid or table using lists of positions. It makes selecting data easy and flexible.
Multi-dimensional fancy indexing in NumPy
array[row_indices, column_indices]
Both row_indices and column_indices can be lists or arrays of integers.
The shapes of the index arrays must match to select elements element-wise.
import numpy as np arr = np.array([[10, 20, 30], [40, 50, 60], [70, 80, 90]]) rows = [0, 1, 2] cols = [2, 1, 0] result = arr[rows, cols] print(result)
arr = np.array([[1, 2], [3, 4], [5, 6]]) rows = np.array([0, 2]) cols = np.array([1, 0]) result = arr[rows, cols] print(result)
This program creates a 3x3 array and picks elements at positions (0,2), (1,0), and (2,1) using multi-dimensional fancy indexing.
import numpy as np # Create a 3x3 array arr = np.array([[5, 10, 15], [20, 25, 30], [35, 40, 45]]) # Define row and column indices to pick elements row_indices = [0, 1, 2] col_indices = [2, 0, 1] # Use multi-dimensional fancy indexing selected_elements = arr[row_indices, col_indices] print("Original array:") print(arr) print("\nSelected elements:") print(selected_elements)
The index arrays must have the same shape to select elements element-wise.
If you want all combinations of rows and columns, use np.ix_() instead.
Multi-dimensional fancy indexing lets you pick specific elements from arrays using lists of row and column positions.
It is useful for selecting scattered data points in any order.
Make sure the index arrays have the same shape for element-wise selection.
Practice
Solution
Step 1: Understand the concept of fancy indexing
Fancy indexing uses arrays or lists of indices to select elements from an array.Step 2: Apply to multi-dimensional arrays
In multi-dimensional fancy indexing, you provide lists of row and column indices to pick specific elements scattered in the array.Final Answer:
Select specific elements from an array using lists of row and column indices. -> Option DQuick Check:
Fancy indexing = element selection by index lists [OK]
- Confusing fancy indexing with sorting
- Thinking it reshapes arrays
- Assuming it sums elements
arr?Solution
Step 1: Recall fancy indexing syntax
Multi-dimensional fancy indexing uses two lists inside square brackets: one for rows, one for columns.Step 2: Match given indices
To select elements at rows 0 and 2, columns 1 and 3, syntax is arr[[0, 2], [1, 3]].Final Answer:
arr[[0, 2], [1, 3]] -> Option AQuick Check:
Two index lists inside brackets = correct fancy indexing [OK]
- Using slicing instead of lists
- Mixing row and column indices in one list
- Using incorrect bracket placement
arr = np.array([[10, 20, 30, 40], [50, 60, 70, 80], [90, 100, 110, 120]]), what is the output of arr[[0, 2], [1, 3]]?Solution
Step 1: Identify indices from fancy indexing
Rows are [0, 2], columns are [1, 3]. So elements are arr[0,1] and arr[2,3].Step 2: Find elements at these positions
arr[0,1] = 20, arr[2,3] = 120, so output is [20 120].Final Answer:
[20 120] -> Option AQuick Check:
Elements at (0,1) and (2,3) = [20 120] [OK]
- Selecting entire rows or columns instead of elements
- Mixing up row and column indices
- Expecting a 2D array output
import numpy as np arr = np.array([[1,2,3],[4,5,6]]) rows = [0,1] cols = [1] print(arr[rows, cols])
Solution
Step 1: Check shapes of index arrays
rows has length 2, cols has length 1; shapes differ.Step 2: Understand fancy indexing requirements
Fancy indexing requires index arrays to have the same shape for element-wise selection.Final Answer:
IndexError due to mismatched index array shapes -> Option CQuick Check:
Index arrays must match shape [OK]
- Assuming different length index lists work
- Confusing syntax error with runtime error
- Expecting partial output without error
data representing sales for 3 stores (rows) over 4 months (columns). You want to select sales for store 0 in month 1, store 2 in month 3, and store 1 in month 0 using multi-dimensional fancy indexing. Which code correctly extracts these values?Solution
Step 1: Match stores and months as row and column indices
Stores: 0, 2, 1 correspond to rows; months: 1, 3, 0 correspond to columns.Step 2: Use multi-dimensional fancy indexing syntax
Use data[[0, 2, 1], [1, 3, 0]] to select elements at these positions element-wise.Final Answer:
data[[0, 2, 1], [1, 3, 0]] -> Option BQuick Check:
Row and column lists match stores and months [OK]
- Swapping row and column lists
- Using chained indexing instead of fancy indexing
- Mismatching lengths of index lists
Ready to prove it?
Pass the test and this pattern moves unknown
