np.where
和 np.argwhere
都是NumPy库中用于条件查找的函数,但它们有一些重要的区别:
-
返回类型:
np.where
返回满足条件的元素的坐标作为元组。如果是多维数组,返回的是两个分别包含满足条件的行坐标和列坐标的数组(或多维坐标)。np.argwhere
返回满足条件的元素的坐标作为多维数组,其中每一行都包含一个坐标。
-
返回值的形状:
np.where
返回的坐标元组的形状与输入数组的形状相同,只不过每个坐标都是布尔条件下的索引。np.argwhere
返回的多维数组的形状与满足条件的元素数量有关,它的第一维的大小等于满足条件的元素数量。
下面是一个示例来说明它们之间的区别:
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 使用 np.where 查找满足条件的元素
indices = np.where(arr > 5)
print("np.where 返回的坐标元组:", indices)
# 使用 np.argwhere 查找满足条件的元素
arg_indices = np.argwhere(arr > 5)
print("np.argwhere 返回的多维坐标数组:", arg_indices)
在上述示例中,np.where
返回的是一个包含两个数组的元组,分别代表满足条件的元素的行坐标和列坐标。而 np.argwhere
返回的是一个包含坐标的多维数组,其中每行包含一个坐标。
根据你的需求,你可以选择使用其中一个来查找满足条件的元素的坐标。如果你只关心满足条件的元素的位置,np.argwhere
可能更方便,因为它直接返回坐标数组。如果你需要在输入数组的相同形状中标记条件下的元素,那么 np.where
可能更适合。