如何根据条件过滤二维NumPy数组
在这篇文章中,我们将看到如何在NumPy二维数组中根据给定的条件应用过滤器。我们必须从现有数组或新数组中获得所需元素的输出,即我们想要过滤的元素。
**这里我们要在numpy中创建一个二维数组。
import numpy as np
# 2-D Array also called as arrays
# with rank 2
np_2d_arr = np.array([[1, 2, 3], [4, 5, 6]])
# View the 2-D Array A2
print(np_2d_arr)
输出:
[[1 2 3]
[4 5 6]]
现在让我们看看在NumPy二维数组中通过给定条件应用过滤器的一些例子。
例子1:使用np.asarray()方法
在这个例子中,我们使用的是np.asarray()方法,其解释如下。
语法 : numpy.asarray(arr, dtype=None, order=None)
参数 :
- arr : [array_like] 输入数据,以任何可以转换为数组的形式。这包括列表、图元的列表、图元、图元的图元、列表的图元和 ndarrays。
- dtype : [数据类型,可选] 默认情况下,数据类型是由输入数据推断出来的。
- order :是否使用行为主(C-style)或列为主(Fortran-style)的内存表示。默认为 “C”。
返回值: [ndarray] arr的阵列解释。如果输入已经是ndarray的dtype和顺序匹配,则不进行复制。如果arr是ndarray的子类,将返回基类ndarray。
在这里,我们首先创建了一个numpy数组和一个带有要过滤的值的过滤器。为了过滤,我们在numpy.in1d()方法中使用了这个fltr,并将其值存储在原始数组中,如果条件满足则返回真。
import numpy as np
arr = np.asarray([[1, 'one'], [2, 'two'], [3, 'three'],
[4, 'four'], [5, 'five']])
fltr = np.asarray(['two', 'four'])
arr[np.in1d(arr[:, 1], fltr)]
输出:
array([['2', 'two'],
['4', 'four']], dtype='<U21')
示例2:使用numpy.all()方法
在这个例子中,我们使用的是np.all()方法,其解释如下。
numpy.all()函数测试沿所述轴的所有数组元素是否评估为真。
语法: numpy.all(array, axis = None, out = None, keepdims = class numpy._globals._NoValue at 0x40ba726c)
参数 :
Array : [array_like]输入数组或对象的元素,我们需要测试。
axis : [int or tuple of ints, optional]数组元素被评估的轴。
out : [ndarray, optional]输出数组,其尺寸与输入数组相同,与结果一起放置。
keepdims : [boolean, optional]如果这个选项被设置为True。
返回 : 一个新的布尔数组,如’out’参数所示。
在这里,我们首先通过使用np.arrange()和reshape()方法创建一个numpy数组。为了过滤,我们在要过滤的索引处使用了条件。如果所有的值都满足条件,np.all()方法返回True。这个返回值与原始数组映射,得到过滤后的值。
import numpy as np
a = np.arange(12).reshape((3, 4))
print(a[:, np.all(a < 10, axis = 0)])
输出:
[[0 1]
[4 5]
[8 9]]
示例3:使用numpy.any()方法
在这个例子中,我们使用的是np.any()方法,其解释如下。
numpy.any()函数测试沿所述轴的任何数组元素是否评估为真
语法 :numpy.any(a, axis = None, out = None, keepdims = class numpy._globals._NoValue at 0x40ba726c)
参数 :
array : [array_like]输入数组或对象的元素,我们需要测试。
axis : [int or tuple of ints, optional]数组元素被评估的轴。
out : [ndarray, optional]输出数组,其尺寸与输入数组相同,放置结果。
keepdmis : [boolean, optional]如果该选项被设置为True。
返回 : 一个新的布尔数组,如’out’参数所示。
在这里,我们首先通过使用np.arrange()和reshape()方法创建一个numpy数组。为了过滤,我们在要过滤的索引处使用了条件。np.any()方法在任何数值满足条件的情况下返回真。这个返回值与原始数组映射,得到过滤后的值。
import numpy as np
a = np.arange(12).reshape((3, 4))
print(a[:, np.any(a < 2, axis = 0)])
输出:
[[0 1]
[4 5]
[8 9]]