NumPy - 元素级数组比较



NumPy 中的元素级比较

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

比较操作贯穿整个数组,结果是一个形状相同的新的布尔数组(True 或 False),指示比较的结果。

基本的元素级比较运算

NumPy 支持多种可以逐元素执行的基本比较运算。这些包括:

  • 相等 (==):检查两个数组(或一个数组和一个标量)中的元素是否相等。
  • 不相等 (!=):检查元素是否不相等。
  • 大于 (>):检查第一个数组中的元素是否大于第二个数组或标量的对应元素。
  • 小于 (<):检查第一个数组中的元素是否小于第二个数组或标量的对应元素。
  • 大于等于 (>=):检查元素是否大于或等于第二个数组或标量的对应元素。
  • 小于等于 (<=):检查元素是否小于或等于第二个数组或标量的对应元素。

示例

在下面的示例中,每个比较操作都在“array1”和“array2”的对应元素之间执行:

import numpy as np

# Creating two arrays for comparison
array1 = np.array([10, 20, 30, 40, 50])
array2 = np.array([15, 20, 25, 40, 55])

# Performing element-wise comparisons
equality = array1 == array2
inequality = array1 != array2
greater_than = array1 > array2
less_than = array1 < array2
greater_equal = array1 >= array2
less_equal = array1 <= array2

# Displaying the results
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)

结果是一个布尔数组,指示每个比较的结果,如下所示:

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]

与标量的元素级比较

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

示例

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

import numpy as np

# Creating two arrays for comparison
array1 = np.array([10, 20, 30, 40, 50])

# Comparing array elements with a scalar value
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

# Creating an array
array = np.array([5, 10, 15, 20, 25, 30])

# Chaining multiple comparisons
result = (array > 10) & (array < 25) & (array % 5 == 0)

# Displaying the results
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" 之间(包括 "3" 和 "7"):

import numpy as np

# Creating an array
array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# Chaining comparisons with scalar values
result = (array >= 3) & (array <= 7)

# Displaying the results
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() 函数使用元素级比较的结果从两个数组(或值)中选择性地选择元素。这对于根据条件过滤或替换元素特别有用。

示例

在这个示例中,大于 "25" 的 "array1" 元素被保留,而所有其他元素被替换为 "0":

import numpy as np

# Creating an array
array1 = np.array([10, 20, 30, 40, 50])

# Using np.where to replace elements based on a condition
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

# Creating an array
array1 = np.array([10, 20, 30, 40, 50])
array2 = np.array([15, 20, 25, 40, 55])

# Finding maximum and minimum values between two arrays
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]
广告