np.where
和 np.argwhere
都是 NumPy 库中用于查找满足条件的元素索引位置的函数,但它们之间有一些区别:
np.where
:
- 返回满足条件的元素的坐标(行和列)的元组或者是一个包含行坐标和列坐标的 NumPy 数组。
- 如果被调用时只有一个条件参数,它返回一个包含满足条件的元素的坐标的元组
(row_indices, column_indices)
。 - 如果被调用时有多个条件参数,它返回一个包含满足所有条件的元素的坐标的元组
(row_indices, column_indices)
。
示例:
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
indices = np.where(arr > 3)
print(indices)
# 输出:(array([1, 1, 2, 2, 2]), array([0, 1, 0, 1, 2]))
np.argwhere
:
- 返回一个包含满足条件的元素的索引的 NumPy 数组。
- 无论是否有多个条件参数,它始终返回一个包含满足条件的元素的索引的二维 NumPy 数组,其中每一行都代表一个满足条件的元素的索引,每一列代表一个维度的索引。
示例:
import numpy as np
arr = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
indices = np.argwhere(arr > 3)
print(indices)
# 输出:[[1 0]
# [1 1]
# [2 0]
# [2 1]
# [2 2]]
总结:np.where
返回坐标元组或坐标数组,而 np.argwhere
始终返回索引数组。选择使用哪个函数取决于你的需求和对结果的期望格式。