【问题标题】:Infer nearest, smaller value in numpy array推断 numpy 数组中最近的、较小的值
【发布时间】:2015-10-24 16:34:13
【问题描述】:

我有一个 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? 为最近的较大值完成此操作。也许可以更改此值以找到最接近的较小值?

【问题讨论】:

  • true_values 是否总是排序?如果是这样,您可能需要查看 searchsorted 函数。
  • 您链接的其他答案可以非常容易转换为找到最接近的较低值。或者,您可以通过坚持 array-value 是否定的方式来修改已有的内容。

标签: python arrays python-2.7 numpy


【解决方案1】:

使用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.argsortsorter 中的sorter 参数。

【讨论】:

    【解决方案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])
    

    【讨论】:

      猜你喜欢
      • 2012-07-30
      • 1970-01-01
      • 1970-01-01
      • 2022-12-12
      • 1970-01-01
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2015-07-30
      相关资源
      最近更新 更多