Fancy Indexing and Advanced Indexing Techniques in NumPy

NumPy, short for Numerical Python, is a powerful library used for scientific computing in Python. It provides support for large, multi-dimensional arrays and matrices, along with a wide range of mathematical functions and tools. In this article, we will explore the concept of fancy indexing and advanced indexing techniques in NumPy.

Introduction to Indexing in NumPy

Indexing in NumPy refers to the process of accessing specific elements or subsets of arrays. It allows us to retrieve values from arrays based on their position or certain conditions. NumPy provides several indexing techniques, including fancy indexing and advanced indexing, which offer more flexible and powerful ways to manipulate arrays.

Fancy Indexing

Fancy indexing, also known as integer array indexing, is a NumPy feature that allows us to use arrays of integers to index or access multiple elements at once. We can pass an array (or list) of integers as indices to retrieve specific elements from an array.

Here's an example to illustrate fancy indexing:

import numpy as np

# Creating an example array
arr = np.array([10, 20, 30, 40, 50])

# Fancy indexing using an array of indices
indices = np.array([1, 3])
result = arr[indices]


Output: [20 40]

In this example, we created an array arr with values [10, 20, 30, 40, 50]. Then, we defined an array indices containing the indices [1, 3]. By using indices as the index, we retrieved the elements at positions 1 and 3 from arr. The output [20 40] represents those elements.

Fancy indexing can be used with multiple dimensions as well. We can pass arrays of indices for each dimension and retrieve multiple elements.

Advanced Indexing

Advanced indexing in NumPy refers to a way of indexing arrays using arrays of indices or Boolean values. It provides more flexibility and power than basic slicing or fancy indexing. With advanced indexing, we can construct arrays by specifying multiple indices in arrays, which results in the creation of a new array.

Let's look at an example to understand advanced indexing:

import numpy as np

# Creating an example array
arr = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

# Advanced indexing using arrays of indices
row_indices = np.array([0, 2])
col_indices = np.array([1, 2])
result = arr[row_indices, col_indices]


Output: [1 8]

In this example, we created a 2-dimensional array arr with values [[0, 1, 2], [3, 4, 5], [6, 7, 8]]. Then, we defined arrays row_indices and col_indices containing the row and column indices of the elements we want to retrieve. By using these arrays as indices, we retrieved the elements at (0, 1) and (2, 2) from arr. The output [1 8] represents those elements.

We can also use Boolean arrays for advanced indexing. By passing a Boolean array as an index, we can select elements based on certain conditions.

import numpy as np

# Creating an example array
arr = np.array([10, 20, 30, 40, 50])

# Advanced indexing using a Boolean array
condition = np.array([True, False, True, False, False])
result = arr[condition]


Output: [10 30]

In this example, we defined a Boolean array condition that represents the condition to filter the elements. We then used condition as an index to retrieve the elements for which the corresponding Boolean values are True. As a result, we obtained the elements [10, 30] from arr.


Fancy indexing and advanced indexing techniques in NumPy provide powerful ways to manipulate and access arrays. With fancy indexing, we can use an array of indices to retrieve specific elements, while advanced indexing allows us to construct new arrays by specifying multiple indices or Boolean values. These techniques enhance the flexibility and capabilities of NumPy, making it a valuable tool for scientific computing and data analysis in Python.

noob to master © copyleft