【问题标题】:finding index of greatest element comparison in numpy array在numpy数组中查找最大元素比较的索引
【发布时间】:2017-04-30 14:51:12
【问题描述】:

我有一个数组a,我想在a 中找到给定值仍然大于的最大元素的位置。

在这个例子中:

a = np.array([0, 50, 5, 52, 60])
v = 55

v 大于 52 的最大元素(索引 3)所以我想返回 3。

numpy 函数 argmax() 不适用于此目的,因为它返回第一个元素。用 numpy 快速正确的方法是什么?

【问题讨论】:

    标签: python arrays numpy max


    【解决方案1】:

    您可以将argmaxwhere 结合使用:

    >>> np.nanargmax(np.where(a < v, a, np.nan))
    3
    

    np.where 在应用nanargmax 之前将所有高于v 的值替换为nan(在计算中忽略nans):

    >>> np.where(a < v, a, np.nan)
    array([  0.,  50.,   5.,  52.,  nan])
    

    【讨论】:

    • 我也在寻找将这些值设置为其他值的方法,并发现 argmax 也在掩码数组上定义。所以它似乎也适用于np.ma.masked_array(a, a&gt;=v).argmax(),但我不确定,因为我之前没有使用过掩码数组。
    • 是的,masked_arrays 也应该可以工作。我可能会使用np.ma.masked_greater_equal(a, v).argmax()。但是有人问了一种快速的方法,根据我的经验,掩码数组通常表现更差。
    【解决方案2】:

    您可以对数组进行切片并自己找到最大值,然后查询其索引:

    np.where(a==a[a<v].max())
    Out: (array([3]),)
    

    【讨论】:

    • 假设a 中有这样一个元素 - 否则失败
    猜你喜欢
    • 1970-01-01
    • 2021-06-20
    • 1970-01-01
    • 2021-11-07
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 2018-10-17
    • 2019-07-12
    相关资源
    最近更新 更多