在1D阵列上使用numpy_where

时间:2014-11-24 01:09:12

标签: arrays numpy indexing location

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

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

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

1 个答案:

答案 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这样的数字专用语言对于新手来说更容易使用,因为语言不太通用,所以要理解的返回类型较少。