在一维数组上使用 numpy_where

问题描述 投票:0回答:1

我正在尝试使用 numpy_where 来查找特定值的索引。虽然我在网上搜索了很多,包括 stackoverflow,但我没有找到一个简单的一维示例。

ar=[3,1,4,8,2,1,0]
>>> np.where(ar==8)
(array([], dtype=int64),)

我期望 np.where(ar==8) 返回数组中 8 的索引/位置。 我究竟做错了什么?我的数组中有什么东西吗? 谢谢

arrays numpy indexing location
1个回答
7
投票

这是一个很好的例子,说明了 Python 中的变量类型范围和

numpy
可能会让初学者感到困惑。发生的情况是
[3,1,4,8,2,1,0]
返回一个列表,而不是
ndarray
。因此,表达式
ar == 8
返回标量
False
,因为列表和标量类型之间的所有比较都返回
False
。因此,
np.where(False)
返回一个空数组。解决这个问题的方法是:

arr = np.array([3,1,4,8,2,1,0])
np.where(arr == 8)

这将返回

(array([3]),)
。这可能会造成进一步的混乱,因为
where
返回一个元组。如果您编写一个打算访问索引位置(在本例中为 3)的脚本,则需要
np.where(arr == 8)[0]
从元组中提取第一个(也是唯一一个)结果。要实际获得值 3,您需要
np.where(arr == 8)[0][0]
(尽管如果数组中没有 8,这会引发
IndexError
)。

这是一个数字专用语言(如 Matlab 或 Octave)更容易用于纯数字应用的示例,因为该语言不太通用,因此需要理解的返回类型较少。

© www.soinside.com 2019 - 2024. All rights reserved.