NumPy: Extract rows with unequal values from 10x3 matrix
Extract rows with unequal values.
Write a NumPy program to extract rows with unequal values (e.g. [1,1,2]) from 10x3 matrix.
Sample Solution:
Example-1:
Python Code:
# Importing the NumPy library
import numpy as np
# Generating a 2D NumPy array 'nums' filled with random integers from 0 to 3
nums = np.random.randint(0, 4, (6, 3))
# Displaying the original 2D array 'nums'
print("Original vector:")
print(nums)
# Checking for rows where consecutive elements are not equal within each row
# using np.logical_and.reduce and axis=1 to check row-wise
new_nums = np.logical_and.reduce(nums[:, 1:] == nums[:, :-1], axis=1)
# Filtering out rows with unequal consecutive values and storing in 'result'
result = nums[~new_nums]
# Displaying rows with unequal consecutive values
print("\nRows with unequal values:")
print(result)
Sample Output:
Original vector: [[3 2 0] [2 3 1] [2 0 3] [3 3 1] [2 1 1] [3 0 2]] Rows with unequal values: [[3 2 0] [2 3 1] [2 0 3] [3 3 1] [2 1 1] [3 0 2]]
Explanation:
np.random.randint(0, 4, (6, 3)): Generates a 2D NumPy array nums with shape (6, 3) and random integers in the range of [0, 4).
new_nums = np.logical_and.reduce(nums[:,1:] == nums[:,:-1], axis=1)
In the above code -
- nums[:, 1:]: Takes all rows and all columns starting from the second column (index 1) to the end of nums.
- nums[:, :-1]: Takes all rows and all columns up to, but not including, the last column of nums.
- nums[:, 1:] == nums[:, :-1]: Compares each pair of adjacent elements in each row. The result is a boolean array of the same shape as “nums” but with the last column removed.
- np.logical_and.reduce(...): Performs a logical AND operation along the specified axis (axis=1, or columns) of the boolean array. This results in a 1D array with a True value for rows where all elements are equal and a False value otherwise.
Example-2:
Python Code:
import numpy as np
nums = np.array([(1,1,1),
(1,1,1),
(1,2,3)])
print("Original vector:")
print(nums)
new_nums = np.logical_and.reduce(nums[:,1:] == nums[:,:-1], axis=1)
result = nums[~new_nums]
print("\nRows with unequal values:")
print(result)
Sample Output:
Original vector: [[1 1 1] [1 1 1] [1 2 3]] Rows with unequal values: [[1 2 3]]
Explanation:
result = nums[~new_nums]
In the above code -
- ~new_nums: Negates the boolean array new_nums, inverting the True and False values.
- nums[~new_nums]: Filters the rows in nums using the negated boolean array ~new_nums. This keeps the rows where not all elements are equal.
print(result): Finally print() function prints the resulting 2D NumPy array with rows from the original nums array where not all elements in a row are the same.
Python-Numpy Code Editor:
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics