在numpy数组中查找最近值
我该如何在一个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