檢查 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 陣列中是否存在指定的行。每種方法都有其自身的優缺點,哪種方法最適合使用取決於具體的用例。

更新於: 2024年2月20日

1K+ 瀏覽量

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告