在numpy数组

时间:2015-10-24 16:34:13

标签: python arrays python-2.7 numpy

我有一个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]

但我希望输出为

nearest = [0.1, 1.2, 3.0, 4.5, 0.1, 2.4, 1.2, 3.0, 1.2]

第一个答案:How to find nearest value that is greater in numpy array? 以最近的较大值完成此操作。也许这可以改为找到最近的,较小的值?

2 个答案:

答案 0 :(得分:5)

使用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])

请注意,searchsorted要求true_values升序顺序排序。这里有必要翻转你的示例数组的顺序,然后将索引返回到负整数,用于花式索引。

如果true_values未排序(向任何方向),则您需要在np.argsort中使用sortersearchsorted参数。

答案 1 :(得分:2)

使用broadcasting -

的一种方法
true_values[(my_values[:,None] < true_values).argmin(1)]

示例运行 -

In [33]: true_values
Out[33]: array([ 4.5,  3. ,  2.4,  1.2,  0.1])

In [34]: my_values
Out[34]: array([ 0.8 ,  2.1 ,  3.01,  8.  ,  0.2 ,  2.6 ,  2.1 ,  3.99,  1.3 ])

In [35]: true_values[(my_values[:,None] < true_values).argmin(1)]
Out[35]: array([ 0.1,  1.2,  3. ,  4.5,  0.1,  2.4,  1.2,  3. ,  1.2])