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