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

请问在numpy数组中找到最近的值

请问在numpy数组中找到最近的值

天涯尽头无女友 2019-08-02 13:02:02
在numpy数组中找到最近的值是否有一种非常规的方法,例如函数,可以找到最近值在数组里?例子:np.find_nearest( array, value )
查看完整描述

3 回答

?
慕仙森

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

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-08-03
?
缥缈止盈

TA贡献2041条经验 获得超4个赞

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

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-08-03
?
富国沪深

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



稍作修改,上面的答案适用于任意维数的数组(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-08-03
  • 3 回答
  • 0 关注
  • 634 浏览
慕课专栏
更多

添加回答

举报

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