檢查 NumPy 陣列是否包含指定行
在使用 Python 中的陣列時,我們經常需要檢查給定陣列中是否存在特定行。這在各種上下文中都很有用,從資料分析到影像處理再到機器學習。幸運的是,NumPy 提供了一種簡單的方法來檢查 NumPy 陣列是否包含指定的行。
在本教程中,我們將探討幾種檢查 NumPy 陣列是否包含指定行的方法。我們將討論使用 NumPy 函式,如 numpy.any()、numpy.equal() 和 numpy.array_equal()。我們還將介紹如何使用布林索引、切片和 numpy.where() 函式來檢查指定行的存在。
檢查 NumPy 陣列是否包含指定行的方法
有幾種方法可以檢查 NumPy 陣列是否包含指定行。我們將在以下部分探討其中一些技術。
方法 1:使用 numpy.any()
numpy.any() 函式如果 NumPy 陣列的任何元素滿足給定條件,則返回 True。我們可以使用此函式來檢查 NumPy 陣列中是否存在指定的行。
以下是一個示例 -
import numpy as np # create a numpy array arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # specify a row to check row_to_check = [4, 5, 6] # check if row exists in the numpy array row_exists = np.any(np.all(arr == row_to_check, axis=1)) # print the result print(row_exists)
輸出
在實現上述程式碼行後,您將獲得以下輸出 -
True
在此示例中,我們建立一個 3x3 的 NumPy 陣列並指定要檢查的行。然後,我們使用 numpy.all() 檢查指定行中的每個元素是否等於 NumPy 陣列中每一行的對應元素。我們使用 axis=1 引數沿行進行檢查。最後,我們使用 numpy.any() 檢查 NumPy 陣列中的任何一行是否滿足此條件。
如果指定的行存在於 NumPy 陣列中,則此程式碼的輸出將為 True。否則,將為 False
方法 2:使用 numpy.equal()
numpy.equal() 函式逐元素比較兩個 NumPy 陣列,並返回一個布林陣列,指示哪些元素相等。我們可以使用此函式來檢查 NumPy 陣列中是否存在指定的行。
示例
以下是一個示例 -
import numpy as np # create a numpy array arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # specify a row to check row_to_check = [4, 5, 6] # check if row exists in the numpy array row_exists = np.equal(arr, row_to_check).all(axis=1).any() # print the result print(row_exists)
輸出
在實現上述程式碼行後,您將獲得以下輸出 -
True
在此示例中,我們建立一個 3×3 的 NumPy 陣列並指定要檢查的行。然後,我們使用 numpy.equal() 檢查指定行中的每個元素是否等於 NumPy 陣列中每一行的對應元素。我們使用 axis=1 引數沿行進行檢查。最後,我們使用 numpy.all() 和 numpy.any() 檢查 NumPy 陣列中的任何一行是否滿足此條件。
如果指定的行存在於 NumPy 陣列中,則此程式碼的輸出將為 True。否則,將為 False。
方法 3:使用 numpy.array_equal()
numpy.array_equal() 函式比較兩個 NumPy 陣列是否相等,如果它們相等則返回 True。我們可以使用此函式來檢查 NumPy 陣列中是否存在指定的行。
示例
以下是一個示例 -
示例
import numpy as np # create a numpy array arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # specify a row to check row_to_check = [4, 5, 6] # check if row exists in the numpy array row_exists = any(np.array_equal(row, row_to_check) for row in arr) # print the result print(row_exists)
輸出
在實現上述程式碼行後,您將獲得以下輸出 -
True
在此示例中,我們建立一個 3×3 的 NumPy 陣列並指定要檢查的行。然後,我們使用生成器表示式迭代 NumPy 陣列中的每一行,並使用 numpy.array_equal() 檢查它是否等於指定的行。我們使用 any() 函式在 NumPy 陣列中的任何一行等於指定的行時返回 True。
如果指定的行存在於 NumPy 陣列中,則此程式碼的輸出將為 True。否則,將為 False。
方法 4:使用布林索引
檢查 NumPy 陣列是否包含指定行的另一種方法是使用布林索引。我們可以建立一個布林陣列,指示 NumPy 陣列中哪些行等於指定的行,然後使用此陣列提取匹配的行。
示例
以下是一個示例 -
import numpy as np # create a numpy array arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # specify a row to check row_to_check = [4, 5, 6] # check if row exists in the numpy array row_exists = any(np.all(arr == row_to_check, axis=1)) # extract matching rows using Boolean indexing matching_rows = arr[row_exists] # print the result print(matching_rows)
輸出
在實現上述程式碼行後,您將獲得以下輸出 -
[[[1 2 3] [4 5 6] [7 8 9]]]
在此示例中,我們建立一個 3x3 的 NumPy 陣列並指定要檢查的行。然後,我們使用 numpy.all() 檢查指定行中的每個元素是否等於 NumPy 陣列中每一行的對應元素。我們使用 axis=1 引數沿行進行檢查。最後,我們使用 numpy.any() 檢查 NumPy 陣列中的任何一行是否滿足此條件。
如果指定的行存在於 NumPy 陣列中,則 row_exists 變數將為 True,我們可以使用布林索引從 NumPy 陣列中提取匹配的行。
方法 5:使用切片
我們還可以使用切片來檢查 NumPy 陣列是否包含指定的行。我們可以切片 NumPy 陣列以提取僅包含與指定行匹配的行(的)子陣列,然後檢查此子陣列是否等於指定的行。
示例
以下是一個示例 -
import numpy as np # create a numpy array arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # specify a row to check row_to_check = [4, 5, 6] # check if row exists in the numpy array matching_rows = arr[(arr == row_to_check).all(axis=1)] # print the result print(matching_rows)
輸出
在實現上述程式碼行後,您將獲得以下輸出 -
[[4 5 6]]
在此示例中,我們建立一個 3x3 的 NumPy 陣列並指定要檢查的行。然後,我們使用 numpy.all() 檢查指定行中的每個元素是否等於 NumPy 陣列中每一行的對應元素。我們使用 axis=1 引數沿行進行檢查。我們使用布林索引提取與指定行匹配的行,並將結果分配給 matching_rows 變數。
如果指定的行存在於 NumPy 陣列中,則 matching_rows 變數將包含一個僅包含匹配行的子陣列。
方法 6:使用 np.where()
檢查 NumPy 陣列是否包含指定行的另一種方法是使用 np.where()。此函式返回一個包含滿足特定條件的索引的陣列元組。
示例
以下是一個示例 -
import numpy as np # create a numpy array arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) # specify a row to check row_to_check = [4, 5, 6] # check if row exists in the numpy array matching_rows = np.where((arr == row_to_check).all(axis=1))[0] # print the result print(matching_rows)
輸出
在實現上述程式碼行後,您將獲得以下輸出 -
[1]
在此示例中,我們建立一個 3×3 的 NumPy 陣列並指定要檢查的行。然後,我們使用 numpy.all() 檢查指定行中的每個元素是否等於 NumPy 陣列中每一行的對應元素。我們使用 axis=1 引數沿行進行檢查。我們使用 np.where() 獲取與指定行匹配的行索引,並將結果分配給 matching_rows 變數。
如果指定的行存在於 NumPy 陣列中,則 matching_rows 變數將包含匹配行的索引。
結論
在本教程中,我們探討了檢查 NumPy 陣列是否包含指定行的不同方法。我們可以使用迴圈和 numpy.array_equal()、布林索引、切片或 np.where() 來檢查 NumPy 陣列中是否存在指定的行。每種方法都有其自身的優缺點,哪種方法最適合使用取決於具體的用例。