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

如何反转scipy.interpolate.interp1d的默认插值行为满足特殊需求

解决方案

问题核心是interp1d默认要求x为一维数组,你传入的x是二维多组序列,和y的维度不匹配才会报错,可通过以下两种方案实现需求:

方案1:逐组遍历生成插值函数

逻辑简单易调试,适合x组数较少的场景:

import numpy as np
from scipy.interpolate import interp1d

n_to_interpolate = 10
x = np.cumsum(np.random.rand(n_to_interpolate, 100), axis=1)
y = np.linspace(0, 1, 100)

# 遍历每一组x,单独生成插值函数
interp_functions = []
for single_x in x:
    f = interp1d(single_x, y, kind="linear") # 可自行修改插值方法,比如'cubic'等
    interp_functions.append(f)

# 使用示例:查询第1组x在0.5处的插值结果
print(interp_functions[0](0.5))

方案2:向量化批量实现

如果x的组数较多、对运行效率有要求,可以通过广播y的维度一次性生成批量插值函数,无需循环:

import numpy as np
from scipy.interpolate import interp1d

n_to_interpolate = 10
x = np.cumsum(np.random.rand(n_to_interpolate, 100), axis=1)
y = np.linspace(0, 1, 100)

# 将y广播为和x同形状的数组
y_broadcast = np.tile(y, (n_to_interpolate, 1))
# 指定插值轴为axis=1,生成批量插值函数
batch_interp = interp1d(x, y_broadcast, axis=1, kind="linear")

# 使用示例:一次性查询所有10组x在0.5处的插值结果
print(batch_interp(0.5)) # 输出长度为10的数组,对应每组x的插值结果

内容的提问来源于stack exchange,提问作者Thomas Wagenaar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:15:03