我正在尝试使用scipy.interpolate.SmoothBivariateSpline对2d非结构化网格进行插值。恐怕我还不了解它应该如何工作。
我尝试了一个非常简单的示例:
from scipy import interpolate
x = [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]
y = [0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3]
z = [-0.07453796, -0.10857792, -0.07307213, 0.01813757, -0.31634891, -0.47235507, -0.33198942, -0.28530956, -0.26995915, -0.40618327, -0.0950876, -0.18871505]
xy_func = interpolate.SmoothBivariateSpline(x, y, z, kx=1, ky=1, s=0)
print(xy_func.ev(0, 1), xy_func.ev(1, 0), xy_func.ev(1, 3))
我已经可视化了结果,很明显这是不正确的。我还评估了一些数据点的结果,因为应该清楚输出的内容。从打印中,我希望得到输出“ -0.10857792,-0.31634891,-0.28530956”,但是得到的结果是“ -0.1390947215 -0.272092075 -0.16190767”。
我要去哪里?
最佳答案
我认为有两个问题:
如果通过增加kx = 2和ky = 3来允许曲线形状,则您已经可以更好地拟合您的预测。
但是,由于SmoothBivariateSpline不喜欢测试数据的垂直特性,因此无论如何您都不会获得很好的结果。如果更改x以使它均匀地增加,即(x = range(len(x)),则看起来好多了。
关于python - SmoothBivariateSpline给出了意外的答案,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56890679/