对NumPy数组进行比较和过滤

  • Post category:Python

对 NumPy 数组进行比较和过滤是数组操作中一项重要的功能,可以通过比较数组中的元素或者根据一定规则进行过滤处理,进而得到符合要求的数据子集。本文将介绍 NumPy 库中常用的比较和过滤方法,包括比较运算符、布尔运算符以及 where 等函数。

比较运算符

比较运算符是对数组中的每个元素进行比较,并返回一个布尔型数组,指示每个元素的比较结果。NumPy 数组支持以下的比较运算符:

  • > 大于
  • < 小于
  • >= 大于等于
  • <= 小于等于
  • == 等于
  • != 不等于

示例代码如下:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = np.array([5, 4, 3, 2, 1])
bool_arr = a > b
print(bool_arr)     # [False False False  True  True]

在这个示例中,我们通过比较运算符 > 对两个数组进行了比较,并得到了一个布尔型数组 bool_arr。它指示了 a 中对应元素是否大于 b 中对应元素的结果。

布尔运算符

布尔运算符是用于组合多个布尔型数组的逻辑运算符,常见的有:

  • & 逻辑与
  • | 逻辑或
  • ~ 逻辑非

示例代码如下:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = np.array([5, 4, 3, 2, 1])
bool_arr1 = a > 3
bool_arr2 = b < 3
bool_arr = bool_arr1 & bool_arr2
print(bool_arr)     # [False False False False False]

在这个示例中,我们通过比较运算符 >< 对两个数组进行了比较,并得到了两个布尔型数组 bool_arr1bool_arr2。通过逻辑与运算符 & 对这两个数组进行逻辑运算,得到了一个布尔型数组 bool_arr。它指示了数组中哪些元素大于 3 且小于 2 的结果。由于没有符合要求的元素,故 bool_arr 中的所有值都为 False

where 函数

where 函数是根据给定条件来搜索元素的函数,它返回符合条件的元素的下标,可以用于对数组进行过滤。它的语法格式如下:

numpy.where(condition[, x, y])

其中:

  • condition:布尔型数组,指定搜索的条件。
  • x:可选参数,指定符合条件的元素替换成的值。
  • y:可选参数,指定不符合条件的元素替换成的值。

示例代码如下:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
indices = np.where(a > 3)
print(indices)      # (array([3, 4]),)

在这个示例中,我们通过 where 函数搜索了数组 a 中所有大于 3 的元素,并返回了它们的下标。输出结果是一个元组 (array([3, 4]),),其中第一个元素是数组中所有符合条件的元素的下标构成的一维数组。

下面我们再通过一个例子来演示 where 函数的替换功能:

import numpy as np

a = np.array([1, 2, 3, 4, 5])
b = np.where(a > 3, -1, a)
print(b)            # [ 1  2  3 -1 -1]

在这个示例中,我们使用 where 函数搜索了数组 a 中所有大于 3 的元素,并将它们替换成了 -1,即将符合条件的元素替换了数组 a。输出的结果是一个新数组 b,它是由原数组 a 通过 where 函数替换得到的。