【问题标题】:using numpy_where on a 1D array在一维数组上使用 numpy_where
【发布时间】:2015-01-21 16:07:31
【问题描述】:

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

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

我希望 np.where(ar==8) 返回数组中 8 的索引/位置。 我究竟做错了什么?它在我的阵列中吗? 谢谢

【问题讨论】:

    标签: arrays numpy indexing location


    【解决方案1】:

    这是一个很好的例子,说明 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 等数字专用语言更易于新手使用,因为该语言不太通用,因此需要理解的返回类型较少。

    【讨论】:

      猜你喜欢
      • 2017-01-16
      • 2020-10-29
      • 2013-09-30
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2014-06-11
      • 2011-08-13
      • 2011-08-04
      相关资源
      最近更新 更多