这个需求一般是查询一个look-up-table,比如数据定标表,假设有如下一个数组(实际数组比这大很多,只是为了举例):
现在要找 1.5 最接近的数值:
1 2 3 4 |
IDL> arr = Randomu(1, 10) * 10 IDL> print, arr 4.17022 9.97185 7.20325 9.32557 0.00114381 1.28124 3.02333 9.99041 1.46756 2.36089 |
我一开始用的是先把数组sort,然后用二分法查找(代码不贴了,很简单)
后来一想IDL应该有内置支持这种查找吧,发现有 Value_Locate 方法,可以解决问题。
但是缺点很明显,需要先sort
后来找到这里:Locating a Value in an Array
我稍微改进了一下,因为Min支持 /ABSOLUTE 参数:
1 2 3 4 |
IDL> value = 1.5 IDL> near = Min(arr - value, idx, /ABSOLUTE) IDL> print, idx, arr[idx], near 8 1.46756 -0.0324411 |