📌  相关文章
📜  如何根据多个条件从 Numpy 数组中删除行?

📅  最后修改于: 2022-05-13 01:55:22.381000             🧑  作者: Mango

如何根据多个条件从 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)

输出: