为了账号安全,请及时绑定邮箱和手机立即绑定

在numpy数组中找到最近的值

在numpy数组中找到最近的值

眼眸繁星 2019-07-19 14:49:31
在numpy数组中找到最近的值是否有一种非常规的方法,例如函数,可以找到最近值在数组里?例子:np.find_nearest( array, value )
查看完整描述

3 回答

?
潇湘沐

TA贡献1816条经验 获得超6个赞

import numpy as np

def find_nearest(array, value):

    array = np.asarray(array)

    idx = (np.abs(array - value)).argmin()

    return array[idx]


array = np.random.random(10)

print(array)

# [ 0.21069679  0.61290182  0.63425412  0.84635244  0.91599191  0.00213826

#   0.17104965  0.56874386  0.57319379  0.28719469]


value = 0.5


print(find_nearest(array, value))

# 0.568743859261


查看完整回答
反对 回复 2019-07-19
?
慕少森

TA贡献2019条经验 获得超9个赞

如果您的数组是排序的,并且非常大,这是一个更快的解决方案:

def find_nearest(array,value):
    idx = np.searchsorted(array, value, side="left")
    if idx > 0 and (idx == len(array) or math.fabs(value - array[idx-1]) < math.fabs(value - array[idx])):
        return array[idx-1]
    else:
        return array[idx]

这将扩展到非常大的数组。如果不能假定数组已经排序,则可以轻松地修改上面的内容,以便在方法中进行排序。对于小型数组来说,这太过分了,但是一旦它们变大,速度就会快得多。


查看完整回答
反对 回复 2019-07-19
?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

稍作修改,上面的答案适用于任意维数的数组(1D,2d,3d,.):

def find_nearest(a, a0):
    "Element in nd array `a` closest to the scalar value `a0`"
    idx = np.abs(a - a0).argmin()
    return a.flat[idx]

或者,写成一行:

a.flat[np.abs(a - a0).argmin()]


查看完整回答
反对 回复 2019-07-19
  • 3 回答
  • 0 关注
  • 1254 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信