Python中可使用Scipy或其他库实现4维或n维插值吗?
多输出二维三次样条实现方案
你要实现的f(A, B) = C,D本质是双输入双输出的三次样条插值,输入为2个自变量,输出为2个因变量,无需专门的“4维三次样条”库,通用科学计算工具即可实现,常用实现路径如下:
Python 实现
使用scipy的插值模块即可完成,分别对两个输出维度做独立的二维三次样条拟合:
- 如果输入是规则网格点,用
bisplrep+bisplev组合:
import numpy as np from scipy import interpolate # 输入样本:A_arr、B_arr为所有样本的输入值,C_arr、D_arr为对应输出 tck_c = interpolate.bisplrep(A_arr, B_arr, C_arr, kx=3, ky=3) tck_d = interpolate.bisplrep(A_arr, B_arr, D_arr, kx=3, ky=3) # 实现目标函数 def f(a, b): return interpolate.bisplev(a, b, tck_c), interpolate.bisplev(a, b, tck_d)
- 如果输入是不规则散点,改用
CloughTocher2DInterpolator构造插值器:
interp_c = interpolate.CloughTocher2DInterpolator(list(zip(A_arr, B_arr)), C_arr) interp_d = interpolate.CloughTocher2DInterpolator(list(zip(A_arr, B_arr)), D_arr) def f(a, b): return interp_c(a, b), interp_d(a, b)
C++ 实现
可以使用Eigen结合样条拓展库,分别对C、D两个输出构造二维三次样条实例,调用时同步计算两个维度的输出即可。
内容的提问来源于stack exchange,提问作者Red
相关产品推荐
相关产品推荐

