在numpy数组中查找最近的值

2024-04-18 13:40:30 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有一种新的方法,例如函数,来找到数组中的最近值

示例:

np.find_nearest( array, value )

Tags: 方法函数示例valuenp数组findarray
3条回答
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

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

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]

这可以扩展到非常大的数组。如果不能假定数组已经排序,可以很容易地修改上面的内容以在方法中进行排序。对于小阵列来说,这是一种过度杀戮,但一旦它们变大,速度就会快得多。

稍微修改一下,上面的答案就可以用于任意维的数组(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()]

相关问题 更多 >