在numpy数组中查找最近值

489 投票
20 回答
576377 浏览
提问于 2025-04-15 21:09

我该如何在一个numpy数组中找到最接近的值呢?举个例子:

np.find_nearest(array, value)

20 个回答

80

稍微修改一下,上面的答案就可以适用于任意维度的数组(比如一维、二维、三维等等):

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()]
124

如果你的数组是排好序的,并且非常大,那么这个方法会更快:

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]

这个方法适用于非常大的数组。如果你不能确定数组已经排好序,可以很容易地修改上面的代码来进行排序。对于小数组来说,这个方法有点过于复杂,但一旦数组变大,这个方法就会快很多。

733
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]

print(find_nearest(array, value=0.5))
# 0.568743859261

撰写回答