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]
廣告