我正在尝试使用 scipy.interpolate.SmoothBivariateSpline 插入二维非结构化网格。恐怕我还不明白它是如何工作的。
我尝试过一个非常简单的例子:
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/