NumPy 数组怎么做逐元素比较?

文章导读
Previous Quiz Next NumPy 中的逐元素比较 NumPy 中的逐元素比较允许您将一个数组的每个元素与另一个数组的对应元素或标量值进行比较。
📋 目录
  1. NumPy 中的逐元素比较
  2. 基本的逐元素比较操作
  3. 与标量的逐元素比较
  4. 链式多个比较
  5. 使用 where() 函数进行条件选择
  6. 使用比较查找最大和最小元素
A A

NumPy - 逐元素数组比较



Previous
Quiz
Next

NumPy 中的逐元素比较

NumPy 中的逐元素比较允许您将一个数组的每个元素与另一个数组的对应元素或标量值进行比较。

比较操作会遍历整个数组,结果是一个形状相同的新数组,其中每个元素是一个 Boolean 值(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:", equality)
print("Inequality:", inequality)
print("Greater than:", greater_than)
print("Less than:", less_than)
print("Greater than or equal to:", greater_equal)
print("Less than or equal to:", less_equal)

结果是一个 Boolean 数组,指示每个比较的结果,如下所示 −

Equality: [False  True False  True False]
Inequality: [ True False  True False  True]
Greater than: [False False  True False False]
Less than: [ True False False False  True]
Greater than or equal to: [False  True  True  True False]
Less than or equal to: [ True  True False  True  True]

与标量的逐元素比较

您也可以将整个数组与单个标量值进行比较。标量值会与数组的每个元素进行比较,结果是一个形状相同的 Boolean 数组。

示例

在这个示例中,"array1" 的每个元素与 "30" 进行比较,结果指示每个元素是否大于 "30" −

import numpy as np

# 创建用于比较的数组
array1 = np.array([10, 20, 30, 40, 50])

# 将数组元素与标量值进行比较
scalar_value = 30
comparison_result = array1 > scalar_value

print("Array elements greater than 30:", comparison_result)   

这将产生以下结果 −

Array elements greater than 30: [False False False  True  True]

链式多个比较

在 NumPy 中链式多个比较涉及使用逻辑运算符组合多个比较操作。例如,你可能想要检查数组的元素是否落在特定范围内,或者是否满足多个条件。

这些操作按顺序求值,结果是一个布尔数组,其中每个元素指示组合条件是否满足。

在 NumPy 中,你可以使用逻辑运算符如 &(与)、|(或)和 ~(非)来链式比较。在链式比较时,确保每个比较操作用括号括起来,以保持正确的操作顺序。以下是链式比较的通用语法 −

(condition1) & (condition2) & ... & (conditionN)

示例:链式比较

在下面的示例中,我们检查数组的元素是否在特定范围内并满足额外条件 −

import numpy as np

# 创建一个数组
array = np.array([5, 10, 15, 20, 25, 30])

# 链式多个比较
result = (array > 10) & (array < 25) & (array % 5 == 0)

# 显示结果
print("Array:", array)
print("Result of Chained Comparisons:", result)  

以上代码的输出如下 −

Array: [ 5 10 15 20 25 30]
Result of Chained Comparisons: [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 of Chained Comparisons with Scalar:", result)                                

得到的输出如下所示 −

Array: [1 2 3 4 5 6 7 8 9]
Result of Chained Comparisons with Scalar: [False False  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("Replaced array:", replaced_array)                                

执行以上代码后,我们得到以下输出 −

Replaced 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("Maximum values:", max_array)
print("Minimum values:", min_array)

产生的结果如下 −

Maximum values: [15 20 30 40 55]
Minimum values: [10 20 25 40 50]