检查 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+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告

© . All rights reserved.