You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何在两条曲线间插值生成数据映射,指定x与变量获取y值

我有两条带关联变量的实测数据曲线。
图1
对应数据如下:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:24:03