python - 在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
有人可以告诉我该怎么做吗?
解决方案
对于最接近的较高值,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
。
推荐阅读
- java - 字符串模棱两可的构造函数(byte[] vs char[])
- javascript - TypeError:无法在 game.js:51 读取 null 的属性“addEventListener”
- terraform - Terraform 多个 for_each 资源
- java - 除了 getString(R.string.idString) 之外,有没有一种方法可以用 Java 语言获取 Android 字符串资源的值?
- terraform-provider-aws - terraform 启动 ec2 实例
- python - Python3中列表的自然排序
- python - 根据 DataFrame 中的值重命名具有相同列名的列
- python - 如果python中的每个列表中都存在一个元素,如何有效地连接列表
- html - 如何在css中将容器与两个不同的容器混合
- excel - 运行时错误 109 - 使用 Set 为字符串设置 VBA 中对象的文件路径