如何反转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
相关产品推荐
相关产品推荐

