如何根据多个条件从Numpy数组中删除行
在这篇文章中,我们将学习如何根据多个条件从NumPy数组中移除行。为了完成我们的任务,我们将需要NumPy模块提供的一些内置的方法,这些方法如下。
- np.delete(ndarray, index, axis): 根据给定的索引条件和指定的轴,从NumPy数组中删除行或列的项目,参数ndarray是将发生操作的数组,索引是根据条件要删除的特定行,在我们的例子中,axis=0用于删除行。
- np.where(conditions): 根据给定的轴,在行或列上根据条件对数组项目进行操作。
注意:对于二维的NumPy数组来说,如果axis=0,则删除行,如果axis=1,则删除列。但是在这里我们的目的是移除行,所以我们将保持axis=0。
让我们以NumPy数组为例。在这里,我们采取了一个NumPy数组,其元素从0到40,并将数组重塑为8行和5列。
import numpy as np
nparray = np.arange(40).reshape((8, 5))
print("Given numpy array:\n", nparray)
输出:
例子1:从NumPy数组中删除元素在5到20之间的行。
这里np.where((nparray >= 5) & (nparray <= 20))[0], axis=0)意味着它将删除其中至少有一个或多个元素大于或等于5且小于或等于20的行。所以,第2、3、4、5行有符合条件的元素,所以它被删除或移除。
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行有符合条件的元素,所以它被删除或移除。
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整除,第五项和第四项被3整除的行。
这里np.where((nparray[:, 2] % 2 == 0)| (nparray[:, 4] % 3 == 0)| (nparray[:, 3] % 3 == 0))[0], axis=0) 表示它将删除其中至少有一个或多个元素的第3列项目被3整除的行,或者至少有一个或多个元素的第5和第4列项目被3整除的行 axis=0来删除这些行。nparray[:, 2], nparray[:, 4], nparray[:, 3] 分别指向每一行的第3、5、4项。所以,第6、7、8行有符合所给条件的元素,所以它被删除或移除。
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)
输出: