2024-04-18 13:40:30 发布
网友
有没有一种新的方法,例如函数,来找到数组中的最近值?
示例:
np.find_nearest( array, value )
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()]
如果数组已排序且非常大,则这是一个更快的解决方案:
这可以扩展到非常大的数组。如果不能假定数组已经排序,可以很容易地修改上面的内容以在方法中进行排序。对于小阵列来说,这是一种过度杀戮,但一旦它们变大,速度就会快得多。
稍微修改一下,上面的答案就可以用于任意维的数组(1d、2d、3d…):
或者,写成一行:
相关问题 更多 >
编程相关推荐