NumPy - 逐元素数组比较
NumPy 中的逐元素比较
NumPy 中的逐元素比较功能允许您将一个数组的每个元素与另一个数组的相应元素或标量值进行比较。
比较会在整个数组上执行,结果是一个形状相同的新数组,其中每个元素都是一个布尔值(True 或 False),表示比较的结果。
基本逐元素比较运算
NumPy 支持几种可以逐元素执行的基本比较运算。这些包括 -
- 相等 (==): 检查两个数组(或一个数组和一个标量)中的元素是否相等。
- 不等 (!=): 检查元素是否不相等。
- 大于 (>): 检查第一个数组中的元素是否大于第二个数组或标量中的相应元素。
- 小于 (<): 检查第一个数组中的元素是否小于第二个数组或标量中的相应元素。
- 大于或等于 (>=): 检查元素是否大于或等于第二个数组或标量中的相应元素。
- 小于或等于 (<=): 检查元素是否小于或与第二个数组或标量中的相应元素相等。
示例
以下示例中,每个比较操作都在"array1"和"array2"的相应元素之间执行 -
import numpy as np # 创建两个数组进行比较 array1 = np.array([10, 20, 30, 40, 50]) array2 = np.array([15, 20, 25, 40, 55]) # 执行逐元素比较 equality = array1 == array2 inequality = array1 != array2 greater_than = array1 > array2 less_than = array1 < array2 greater_equal = array1 >= array2 less_equal = array1 <= array2 # 显示结果 print("等于:", equality) print("不等于:", inequality) print("大于:", greater_than) print("小于:", less_than) print("大于或等于:", greater_equal) print("小于或等于:", less_equal)
结果是一个布尔数组,表示每次比较的结果,如下所示 -
等于:[False True False True False] 不等于:[True False True False True] 大于:[False False True False False] 小于:[True False False False True] 大于或等于:[False True True True False] 小于或等于到:[ True True False True True]
使用标量进行逐元素比较
您还可以将整个数组与单个标量值进行比较。标量值与数组的每个元素进行比较,结果是一个相同形状的布尔数组。
示例
在此示例中,将"array1"中的每个元素与"30"进行比较,结果指示每个元素是否大于"30" -
import numpy as np # 创建两个用于比较的数组 array1 = np.array([10, 20, 30, 40, 50]) # 将数组元素与标量值进行比较 scalar_value = 30 comparison_result = array1 > scalar_value print("数组元素大于 30:", comparison_result)
这将产生以下结果 -
数组元素大于 30: [False False False True True]
链式多重比较
在 NumPy 中,链式多重比较涉及使用逻辑运算符组合多个比较运算。例如,你可能想要检查数组元素是否在特定范围内,或者是否满足多个条件。
这些运算按顺序执行,结果是一个布尔数组,其中每个元素表示组合条件是否满足。
在 NumPy 中,你可以使用逻辑运算符(例如 &(与)、|(或)和 ~(非))进行链式比较。链式比较时,请确保每个比较运算都括在括号中,以保持运算顺序正确。以下是链式比较的通用语法:
(条件 1) & (条件 2) & ... & (conditionN)
示例:链式比较
在下面的示例中,我们检查数组的元素是否在特定范围内并满足附加条件 -
import numpy as np # 创建数组 array = np.array([5, 10, 15, 20, 25, 30]) # 链式多重比较 result = (array > 10) & (array < 25) & (array % 5 == 0) # 显示结果 print("数组:", array) print("链式比较结果:", result)
以下是上述代码的输出 -
数组:[ 5 10 15 20 25 30] 链式比较结果:[False False True True False False]
示例:使用标量值进行链式比较
此处,比较检查数组中的每个元素是否介于"3"和"7"之间(含边界值)-
import numpy as np # 创建数组 array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9]) # 使用标量值进行链式比较 result = (array >= 3) & (array <= 7) # 显示结果 print("Array:", array) print("链式标量比较结果:", result)
输出结果如下 -
数组:[1 2 3 4 5 6 7 8 9] 链式标量比较结果:[False False True True True True True True False False]
使用 where() 函数进行条件选择
np.where() 函数使用逐元素比较的结果,从两个数组(或值)中选择性地选择一个元素。这对于根据条件过滤或替换元素特别有用。
示例
在此示例中,数组"array1"中大于"25"的元素将被保留,而所有其他元素将被替换为"0" -
import numpy as np # 创建数组 array1 = np.array([10, 20, 30, 40, 50]) # 使用 np.where 根据条件替换元素 replaced_array = np.where(array1 > 25, array1, 0) print("替换后的数组:", switched_array)
执行上述代码后,我们得到以下输出 -
替换后的数组:[ 0 0 30 40 50]
通过比较查找最大和最小元素
逐元素比较可以与 np.maximum() 和 np.minimum() 等函数结合使用,以查找两个数组之间的最大值或最小值。
示例
在此示例中,我们使用 np.maximum() 函数和 np.minimum() 函数比较"array1"和"array2"的元素,分别返回最大值和最小值的数组 -
import numpy as np # 创建数组 array1 = np.array([10, 20, 30, 40, 50]) array2 = np.array([15, 20, 25, 40, 55]) # 查找两个数组中的最大值和最小值 max_array = np.maximum(array1, array2) min_array = np.minimum(array1, array2) print("最大值:", max_array) print("最小值:", min_array)
结果如下 -
最大值:[15 20 30 40 55] 最小值:[10 20 25 40 50]