我正在尝试使用 numpy_where 来查找特定值的索引。虽然我在网上搜索了很多,包括 stackoverflow,但我没有找到一个简单的一维示例。
ar=[3,1,4,8,2,1,0]
>>> np.where(ar==8)
(array([], dtype=int64),)
我期望 np.where(ar==8) 返回数组中 8 的索引/位置。 我究竟做错了什么?我的数组中有什么东西吗? 谢谢
这是一个很好的例子,说明了 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)更容易用于纯数字应用的示例,因为该语言不太通用,因此需要理解的返回类型较少。