首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在一维数组上使用numpy_where

在一维数组上使用numpy_where
EN

Stack Overflow用户
提问于 2014-11-24 01:09:11
回答 1查看 2.7K关注 0票数 6

我试图使用numpy_where来查找特定值的索引。虽然我已经搜索了相当多的网页,包括堆栈溢出,但我没有找到一个简单的一维例子。

代码语言:javascript
复制
ar=[3,1,4,8,2,1,0]
>>> np.where(ar==8)
(array([], dtype=int64),)

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-24 01:26:18

这是一个很好的例子,说明了对于初学者来说,Pythonandnumpy中的变量类型的范围是如何混淆的。正在发生的是[3,1,4,8,2,1,0]返回一个列表,而不是一个ndarray。因此,表达式ar == 8返回标量False,因为列表类型和标量类型之间的所有比较都返回False。因此,np.where(False)返回一个空数组。解决这个问题的方法是:

代码语言:javascript
复制
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更容易用于新手,因为该语言不那么通用,因此需要理解的返回类型更少。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27096479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档