use*_*176 1 python arrays numpy python-2.7
我有一个my_values数组,我试图推断出true_values数组中最接近的较小值.使用下面的find_nearest函数无法实现我想要的功能.如何附加它以找到最近的较小值?
import numpy as np
true_values = np.array([4.5, 3.0, 2.4, 1.2, 0.1])
my_values = np.array([0.8, 2.1, 3.01, 8.0, 0.2, 2.6, 2.1, 3.99, 1.3])
def find_nearest(array,value):
idx = np.abs((array-value)).argmin()
return array[idx]
nearest = []
for i in my_values:
nearest.append(find_nearest(true_values,i))
print nearest
# [1.2, 2.4, 3.0, 4.5, 0.1, 2.4, 2.4, 4.5, 1.2]
Run Code Online (Sandbox Code Playgroud)
但相反,我希望输出
nearest = [0.1, 1.2, 3.0, 4.5, 0.1, 2.4, 1.2, 3.0, 1.2]
Run Code Online (Sandbox Code Playgroud)
第一个答案在这里:如何找到numpy数组中更大的最接近的值? 以最近的较大值完成此操作.也许这可以改为找到最近的,更小的值?
使用searchsorted
是一个选项(如上面的评论和链接问题中的一个答案中所述):
>>> true_values[-np.searchsorted(true_values[::-1], my_values)]
array([ 0.1, 1.2, 3. , 4.5, 0.1, 2.4, 1.2, 3. , 1.2])
Run Code Online (Sandbox Code Playgroud)
请注意,searchsorted
需要true_values
按升序排序.这里有必要翻转示例数组的顺序,然后将索引返回到负整数以进行花式索引.
如果true_values
没有排序(在任何方向),您将需要使用np.argsort
和sorter
参数searchsorted
.