How to Get the N-Largest Values of an Array using NumPy
The numpy.argsort() function can be used to find the n-largest values in an array. Instead of directly returning the sorted array, argsort() returns the indices that would sort the array. Using these indices with slicing, we can extract the top n largest elements efficiently.
In this example, we extract the 1 largest value from a NumPy array.
import numpy as np
arr = np.array([5, 1, 8, 3])
n = 1
idx = np.argsort(arr)
res = arr[idx][-n:]
print(n, "largest value:", res)
Output
1 largest value: [8]
Explanation:
- np.argsort(arr) -> returns indices [1, 3, 0, 2]
- Sorting gives [1, 3, 5, 8]
- Last element -> [8]
Syntax
numpy.argsort(arr, axis=-1, kind='quicksort', order=None)
Parameters:
- arr: Input array.
- axis: Axis along which to sort. Default is -1 (last axis).
- kind: Sorting algorithm ('quicksort', 'mergesort', 'heapsort', 'stable').
- order: When sorting structured arrays, specifies field(s) to sort by.
Return Value:
- Returns an array of indices that would sort arr.
- Using these indices, we can reconstruct the sorted array or extract top n elements.
Examples
Example 1: This example extracts the 2 largest values from a NumPy array.
import numpy as np
arr = np.array([2, 0, 1, 5, 4, 1, 9])
print("Array:", arr)
idx = np.argsort(arr)
sorted_arr = arr[idx]
n = 2
res = sorted_arr[-n:]
print(n, "largest values:", res)
Output
Array: [2 0 1 5 4 1 9] 2 largest values: [5 9]
Explanation:
- Sorted array -> [0, 1, 1, 2, 4, 5, 9].
- Last 2 elements -> [5, 9].
Example 2: This example extracts the top 3 values from a NumPy array.
import numpy as np
arr = np.array([2, 0, 1, 5, 4, 1, 9])
print("Array:", arr)
idx = np.argsort(arr)
sorted_arr = arr[idx]
n = 3
res = sorted_arr[-n:]
print(n, "largest values:", res)
Output
Array: [2 0 1 5 4 1 9] 3 largest values: [4 5 9]
Explanation:
- Sorted array -> [0, 1, 1, 2, 4, 5, 9].
- Last 3 elements -> [4, 5, 9].
Example 3: This example shows how to flatten a 2D array and find the 2 largest values.
import numpy as np
arr = np.array([[3, 7, 1], [9, 2, 6]])
print("2D Array:\n", arr)
idx = np.argsort(arr, axis=None)
sorted_arr = arr.flatten()[idx]
n = 2
res = sorted_arr[-n:]
print(n, "largest values:", res)
Output
2D Array: [[3 7 1] [9 2 6]] 2 largest values: [7 9]
Explanation:
- Flattened array -> [3, 7, 1, 9, 2, 6].
- Sorted array -> [1, 2, 3, 6, 7, 9].
- Last 2 values -> [7, 9].