Python中如何在两条曲线间插值生成数据映射,指定x与变量获取y值
我有两条带关联变量的实测数据曲线。
对应数据如下:
y_min = np.array([80.4, 82.1, 84]) y_max = np.array([149.5, 169.3, 197.4]) variable_data = np.array([14.1, 1.9]) x_data = np.array([157.0, 235.0, 314.0])
请问我能否通过指定x值和对应变量,在两条曲线之间插值得到对应的y值?
可以实现,你可以通过两次线性插值得到目标y值,逻辑如下:
- 首先明确映射关系:
variable_data的两个取值1.9、14.1分别对应y_min、y_max两条曲线 - 第一步x维度插值:对指定的目标x值,分别在
y_min和y_max曲线上插值得到对应x下的上下边界y值 - 第二步变量维度插值:根据你指定的变量值,在两个边界y值之间做线性插值,得到最终的y结果
你可以参考下面的Python实现代码:
import numpy as np from scipy.interpolate import interp1d # 原始数据 y_min = np.array([80.4, 82.1, 84]) y_max = np.array([149.5, 169.3, 197.4]) variable_data = np.array([1.9, 14.1]) # 调整顺序对应y_min到y_max的映射 x_data = np.array([157.0, 235.0, 314.0]) # 构建x到y_min、y_max的插值函数,不需要外推可删除fill_value参数 interp_min = interp1d(x_data, y_min, fill_value="extrapolate") interp_max = interp1d(x_data, y_max, fill_value="extrapolate") def get_y(target_x, target_var): # 得到当前x对应的上下边界y y_low = interp_min(target_x) y_high = interp_max(target_x) # 计算变量在区间内的权重 var_weight = (target_var - variable_data[0]) / (variable_data[1] - variable_data[0]) # 变量值超出范围时自动截断到边界值 var_weight = np.clip(var_weight, 0, 1) # 插值得到最终y return y_low + var_weight * (y_high - y_low) # 测试示例:x=200,变量值为10 print(get_y(200, 10))
如果你确认变量和y的关系不是线性的,可以把第二步的线性插值替换为对应的非线性插值逻辑即可。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

