如何根据多个条件从 Numpy 数组中删除行?
在本文中,我们将学习如何基于多个条件从 NumPy 数组中删除行。为了完成我们的任务,我们需要 NumPy 模块提供的一些内置方法,如下所示:
- np.delete(ndarray,索引,轴): 根据给定的索引条件和指定的轴从 NumPy 数组中删除行或列的项目,参数 ndarray 是将在其上进行操作的数组,索引是基于要删除的条件的特定行,axis=0 用于删除在我们的例子中的行。
- np.where(条件): 根据给定轴的行或列条件对数组项进行操作。
注意:对于二维 NumPy 数组,如果axis=0,则删除行,如果axis=1,则删除列。但是这里我们打算删除行,所以我们将保持axis=0。
让我们以 NumPy 数组为例。这里我们采用了一个包含 0 到 40 个元素的 NumPy 数组,并将该数组重新整形为 8 行 5 列。
Python3
import numpy as np
nparray = np.arange(40).reshape((8, 5))
print("Given numpy array:\n", nparray)
Python3
nparray = np.delete(nparray, np.where(
(nparray >= 5) & (nparray <= 20))[0], axis=0)
print("After deletion of rows containing
numbers between 5 and 20: \n", nparray)
Python3
nparray = np.delete(nparray, np.where(
(nparray[:, 0] >= 25) & (nparray[:, 0] <= 35))[0], axis=0)
print("After deletion of rows whose first element \
is between 25 and 35:\n", nparray)
Python3
nparray = np.delete(nparray, np.where((nparray[:, 2] % 2 == 0) | (
nparray[:, 4] % 3 == 0) | (nparray[:, 3] % 3 == 0))[0], axis=0)
print("After removing required rows :\n", nparray)
输出:
示例 1:从 NumPy 数组中删除元素介于 5 到 20 之间的行
这里 np.where((nparray >= 5) & (nparray <= 20))[0], axis=0) 表示将删除至少有一个或多个元素大于或等于的行5 且小于或等于 20。因此,第 2、第 3、第 4 和第 5 行根据给定的条件具有元素,因此将其删除或移除。
蟒蛇3
nparray = np.delete(nparray, np.where(
(nparray >= 5) & (nparray <= 20))[0], axis=0)
print("After deletion of rows containing
numbers between 5 and 20: \n", nparray)
输出:
示例 2:从 NumPy 数组中删除第一个元素大于 25 且小于 35 的行
这里 (np.where(nparray[:, 0] >= 25) & (nparray[:, 0] <= 35))[0], axis=0) 表示将删除其中至少有一个的行或多个元素,其第一个元素大于或等于 25 且小于等于 35。 nparray[:, 0] 指向每一行的第一个元素。因此,第 6、7、8 行根据给定的条件具有元素,因此它会被删除或移除。
蟒蛇3
nparray = np.delete(nparray, np.where(
(nparray[:, 0] >= 25) & (nparray[:, 0] <= 35))[0], axis=0)
print("After deletion of rows whose first element \
is between 25 and 35:\n", nparray)
输出:
示例 3:删除第三项可被 2 整除的行,第 5 项和第 4 项可被 3 整除
这里 np.where((nparray[:, 2] % 2 == 0) | (nparray[:, 4] % 3 == 0)| (nparray[:, 3] % 3 == 0))[0] ,axis=0) 表示将删除至少有一个或多个第 3 列项目可被 3 整除的元素的行或至少有一个或多个第 5 和第 4 列项目的元素的行(s) 可被 3 轴 = 0 整除以删除行。 nparray[:, 2], nparray[:, 4], nparray[:, 3] 分别指向每行的第三、第五和第四项。因此,第 6、7、8 行根据给定的条件具有元素,因此它会被删除或移除。
蟒蛇3
nparray = np.delete(nparray, np.where((nparray[:, 2] % 2 == 0) | (
nparray[:, 4] % 3 == 0) | (nparray[:, 3] % 3 == 0))[0], axis=0)
print("After removing required rows :\n", nparray)
输出: