首页 > 解决方案 > 在numpy数组中找到一个值上方和下方的最近值

问题描述

我有一个key_value看起来像这样的对象

v1          242.466667
v2          242.883333
v3          242.05
v4          245.183333
v5          247.066667

Name: acolumnname, dtype: object

我想要的是找到最接近顶部和底部的值以及我设法以某种方式成功找到最接近的值的键

def find_nearest_key_value(key_value_object, base_value):
    values_array = np.asarray(key_value_object)
    idx = (np.abs(values_array - base_value)).argmin() #finds the closest
    key=key_value_object.keys()[idx] # finds the key for the value
    return key,value_array[idx]

以上工作正常。但我想在 2 个单独的方法中找到 base_value 上下最接近的值

def find_nearest_higher_key_value(key_value_object, base_value):
     #returns nearest higher value with key

def find_nearest_lower_key_value(key_value_object, base_value):
    #returns nearest lower value with key

有人可以告诉我该怎么做吗?

标签: pythonnumpy

解决方案


对于最接近的较高值,values_array - base_value当您的数组的值高于 时,差异将为正base_value。将所有负差设置为无穷大,然后找到最小值的索引。

def find_nearest_higher_key_value(key_value_object, base_value):
    values_array = np.asarray(key_value_object)
    diff = values_array - base_value
    diff[diff < 0] = np.inf
    idx = diff.argmin()
    key = key_value_object.keys()[idx]
    return key, value_array[idx]

对于较低的值,只需将差值切换到base_value - values_array


推荐阅读