np.where()函数和np.argwhere的区别
时间: 2023-11-12 16:58:01 浏览: 77
np.where()函数和np.argwhere()函数都可以用于查找数组中满足条件的元素的索引,但它们的返回值有所不同。
np.where()函数返回满足条件的元素的索引,这些索引以元组的形式给出,每个维度一个元组。例如,对于一个二维数组,返回的元组包含两个数组,第一个数组是满足条件的元素的行索引,第二个数组是满足条件的元素的列索引。
np.argwhere()函数返回满足条件的元素的索引,这些索引以二维数组的形式给出,每行一个索引。例如,对于一个二维数组,返回的二维数组包含多行,每行是一个满足条件的元素的索引,第一列是行索引,第二列是列索引。
下面是一个示例代码:
```python
import numpy as np
a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])
# 使用np.where()函数查找满足条件a > 3的元素的索引
indices = np.where(a > 3)
print(indices) # 输出:(array([1, 1, 2, 2, 2]), array([1, 2, 0, 1, 2]))
# 使用np.argwhere()函数查找满足条件a > 3的元素的索引
indices = np.argwhere(a > 3)
print(indices) # 输出:[[1 1], [1 2], [2 0], [2 1], [2 2]]
```
相关问题
np.argwhere与np.where区别
np.argwhere和np.where都是NumPy中用于查找数组中满足某个条件的元素索引的函数。它们的主要区别在于返回结果的形式和用法上。
np.where(condition)函数返回满足条件的元素的索引,以元组的形式表示。每个元组表示一个满足条件的元素的索引。如果数组是一维的,那么返回的结果是一个一维数组;如果数组是多维的,那么返回的结果是一个元组,其中每个元素是一个一维数组。
np.argwhere(condition)函数返回满足条件的元素的索引,以二维数组的形式表示。每一行表示一个满足条件的元素的索引。其中,每一行的第一个元素表示该元素在第0维的索引,第二个元素表示该元素在第1维的索引,以此类推。返回的结果是一个二维数组。
简而言之,np.where返回满足条件的元素索引的元组或数组,而np.argwhere返回满足条件的元素索引的二维数组。
np.argwhere和np.where有什么区别?
np.argwhere和np.where都是用于根据条件返回数组中满足条件的元素的索引。它们的区别在于返回结果的形式和使用方式。
np.argwhere返回一个二维数组,其中每一行表示一个满足条件的元素的索引。每一行的元素是一个包含数组维度的元组,表示该元素在数组中的位置。
np.where返回一个包含满足条件的元素的索引的元组。如果只提供条件,它将返回一个包含满足条件的元素的索引的元组。如果同时提供了x和y参数,它将返回一个与条件相同形状的数组,其中满足条件的元素来自x,不满足条件的元素来自y。
下面是两个函数的示例使用方法:
1. 使用np.argwhere获取满足条件的元素的索引[^1]:
```python
import numpy as np
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
condition = arr > 5
indices = np.argwhere(condition)
print(indices)
```
输出:
```
[[1 2]
[2 0]
[2 1]
[2 2]]
```
2. 使用np.where获取满足条件的元素的索引或根据条件返回不同的值:
```python
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
condition = arr > 3
indices = np.where(condition)
print(indices)
x = np.array([1, 2, 3, 4, 5])
y = np.array([10, 20, 30, 40, 50])
result = np.where(condition, x, y)
print(result)
```
输出:
```
(array([3, 4]),)
[10 20 30 4 5]
```
阅读全文