🐍 NumPy – Fancy Indexing
Fancy indexing in NumPy is a powerful technique that allows you to access multiple array elements using a list of indices.
Unlike normal indexing (which accesses one element at a time), fancy indexing lets you pick:
- Multiple elements
- Non-continuous elements
- Reordered elements
- Specific rows or columns
It is widely used in:
- Data analysis
- Machine learning
- Data filtering
- Image processing
- Feature selection
What is Fancy Indexing?
Fancy indexing means selecting elements using arrays or lists of indices instead of single values or slices.
Example (Simple Idea)
Array: [10, 20, 30, 40, 50]
Index: 0 1 2 3 4
Pick: [0, 2, 4]
Result: [10, 30, 50]🔵 Fancy Indexing in 1D Arrays
Example
import numpy as np
arr = np.array([10, 20, 30, 40, 50])
result = arr[[0, 2, 4]]
print(result)Output:
[10 30 50]✔ Multiple elements selected at once
🟢 Reordering Elements
Fancy indexing can change order.
arr = np.array([10, 20, 30, 40, 50])
result = arr[[4, 0, 2]]
print(result)Output:
[50 10 30]✔ Order is controlled manually
🟡 Repeating Elements
result = arr[[1, 1, 3]]
print(result)Output:
[20 20 40]✔ Same index can be used multiple times
🔴 Fancy Indexing in 2D Arrays
In 2D arrays, fancy indexing can select rows.
Example: Row Selection
arr = np.array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
])
result = arr[[0, 2]]
print(result)Output:
[[1 2 3]
[7 8 9]]✔ Selects row 0 and row 2
🟣 Fancy Indexing with Columns
result = arr[:, [0, 2]]
print(result)Output:
[[1 3]
[4 6]
[7 9]]✔ Selects column 0 and column 2
🟤 Advanced 2D Fancy Indexing
You can select specific elements using row and column index pairs.
result = arr[[0, 1, 2], [0, 1, 2]]
print(result)Output:
[1 5 9]✔ Picks diagonal elements
🔵 Fancy Indexing with Conditions (Hybrid Use)
arr = np.array([10, 15, 20, 25, 30])
indices = [0, 2, 4]
print(arr[indices])Output:
[10 20 30]🧠 Fancy Indexing vs Slicing
| Feature | Fancy Indexing | Slicing |
|---|---|---|
| Access type | Random elements | Continuous range |
| Flexibility | High | Medium |
| Order control | Yes | No |
| Repetition | Allowed | Not allowed |
| Performance | Slightly slower | Faster |
⚡ Real-World Example
Selecting specific students
scores = np.array([55, 78, 90, 40, 88, 60])
selected = scores[[1, 2, 4]]
print(selected)Output:
[78 90 88]✔ Used in analytics and reporting
🖼️ Image Processing Example
image = np.array([
[10, 20, 30],
[40, 50, 60],
[70, 80, 90]
])
pixels = image[[0, 2], [1, 2]]
print(pixels)Output:
[20 90]✔ Useful in computer vision feature extraction
🚀 Performance Notes
- Fancy indexing creates a copy, not a view
- Can consume more memory than slicing
- Best used when selecting scattered elements
- Avoid in large loops for performance-critical tasks
⚠️ Common Mistakes
1. Shape mismatch error
IndexError: shape mismatch✔ Fix: Ensure index arrays are compatible
2. Confusing slicing and fancy indexing
✔ Slicing → continuous data
✔ Fancy indexing → scattered data
🧾 Summary
NumPy fancy indexing allows:
- Selection of multiple elements
- Non-continuous access
- Reordering of data
- Row/column extraction
- Advanced element picking
🏁 Conclusion
Fancy indexing is a powerful NumPy feature that gives you full control over data selection. It is widely used in:
- Data science
- Machine learning
- Image processing
- Feature extraction
Mastering fancy indexing helps you write more flexible and expressive Python code for real-world applications.


0 Comments