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

在numpy数组中找到最近的值

是否有一种非常规的方法,例如函数,可以找到最近值在数组里?

例子:

np.find_nearest( array, value )


天涯尽头无女友
浏览 635回答 3
3回答

慕仙森

import numpy as npdef 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.5print(find_nearest(array, value))# 0.568743859261

缥缈止盈

如果您的数组是排序的,并且非常大,这是一个更快的解决方案:def&nbsp;find_nearest(array,value): &nbsp;&nbsp;&nbsp;&nbsp;idx&nbsp;=&nbsp;np.searchsorted(array,&nbsp;value,&nbsp;side="left") &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;idx&nbsp;>&nbsp;0&nbsp;and&nbsp;(idx&nbsp;==&nbsp;len(array)&nbsp;or&nbsp;math.fabs(value&nbsp;-&nbsp;array[idx-1])&nbsp;<&nbsp;math.fabs(value&nbsp;-&nbsp;array[idx])): &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;array[idx-1] &nbsp;&nbsp;&nbsp;&nbsp;else: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;array[idx]这将扩展到非常大的数组。如果不能假定数组已经排序,则可以轻松地修改上面的内容,以便在方法中进行排序。对于小型数组来说,这太过分了,但是一旦它们变大,速度就会快得多。

富国沪深

稍作修改,上面的答案适用于任意维数的数组(1D,2d,3d,.):def&nbsp;find_nearest(a,&nbsp;a0): &nbsp;&nbsp;&nbsp;&nbsp;"Element&nbsp;in&nbsp;nd&nbsp;array&nbsp;`a`&nbsp;closest&nbsp;to&nbsp;the&nbsp;scalar&nbsp;value&nbsp;`a0`" &nbsp;&nbsp;&nbsp;&nbsp;idx&nbsp;=&nbsp;np.abs(a&nbsp;-&nbsp;a0).argmin() &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a.flat[idx]或者,写成一行:a.flat[np.abs(a&nbsp;-&nbsp;a0).argmin()]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python