w3resource

Advanced NumPy Exercises - Find the second-largest value in each column in an array


Write a NumPy program to create a 5x5 array with random values and find the second-largest value in each column.

Sample Solution:

Python Code:

import numpy as np
# create a 5x5 array with random values
nums = np.random.rand(5, 5)
print("Original array elements:")
print(nums)
# find the indices of the second-largest value in each column
indices = np.argsort(nums, axis=0)[-2, :]
# get the second-largest value in each column using the indices
second_largest_values = nums[indices, np.arange(nums.shape[1])]
print("\nSecond-largest value in each column:")
print(second_largest_values)

Output:

Original array elements:
[[0.43548628 0.56830303 0.35266475 0.08104804 0.42066255]
 [0.32249988 0.99106993 0.29643649 0.24686359 0.33177455]
 [0.82353428 0.29085088 0.78221062 0.12124152 0.00793634]
 [0.06281302 0.39830301 0.13914671 0.26938172 0.80440981]
 [0.79197112 0.61384451 0.27912583 0.50680852 0.35902385]]

Second-largest value in each column:
[0.79197112 0.61384451 0.35266475 0.26938172 0.42066255]

Explanation:

In the above exercise -

nums = np.random.rand(5, 5): This line creates a 5x5 NumPy array filled with random numbers between 0 and 1.

indices = np.argsort(nums, axis=0)[-2, :]: This line sorts the nums array along the first axis (i.e., vertically) and returns the indices of the sorted elements. The -2 index in [-2, :] selects the second-largest element, and the : in [-2, :] means to select all columns. The resulting array indices contains the row indices of the second-largest values for each column.

second_largest_values = nums[indices, np.arange(nums.shape[1])]: This line creates a new array second_largest_values by indexing nums using the row indices in indices and column indices created by np.arange(nums.shape[1]), which returns an array of integers from 0 to the number of columns in nums. This selects the second-largest value in each column and creates a 1D array containing those values.

Python-Numpy Code Editor: