在1D阵列上使用numpy_where

icy*_*ypy 4 arrays indexing location numpy

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

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

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

Fra*_*k M 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)
Run Code Online (Sandbox Code Playgroud)

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

这是一个例子,其中像Matlab或Octave这样的数字专用语言更易于用于新手,因为语言不太通用,因此需要理解的返回类型较少.