在Python中使用 scipy 执行多维插值方法对比
发布网友
发布时间:2024-10-01 08:02
我来回答
共1个回答
热心网友
时间:2024-10-24 15:26
当已知某些点而不知道具体方程时,我们通常有两种做法:拟合或者插值。
scipy包含各种专用于科学计算中常见问题的工具箱。其不同的子模块对应不同的应用,如插值、积分、优化、图像处理、统计、特殊函数等。scipy.interpolate为插值模块,该模块对于从实验数据拟合函数非常有用,可以对不存在测度的点进行评估,该模块基于FITPACK Fortran。
在插值中,二维或者更高维的插值是最值得关注的。目前在scipy.interpolate常用的二维甚至高维插值方法主要有:
然而,在实际的数据中,由于空间采样的点都是非结构化的实验数据,因此,本文中只介绍一种二维的结构化网格的插值方法,其余都是针对非结构化网格插值方法进行介绍。
1.1 RegularGridInterpolator
假设您在规则网格上有 N 维数据,并且您想要对其进行插值。在这种情况下,RegularGridInterpolator可能会有用。RegularGridInterpolator在任意维度的规则或直线网格上进行插值。数据必须在直线网格上定义:即间距均匀或不均匀的矩形网格。支持线性、最近邻、样条插值。
应用案例
1.2 scipy.interpolate.LinearNDInterpolator
执行N > 1 维中的分段线性插值。
应用案例:
1.3 scipy.interpolate.NearestNDInterpolator
执行N > 1 维中的最近邻插值。
应用举例:
1.4 scipy.interpolate.griddata
假设您有一个基础函数的*数据[公式],您只知道不形成规则网格的点的值,假设我们要对二维函数进行插值。griddata基于三角剖分,因此适用于非结构化、分散的数据。
应用案例:
导入依赖库
生成数据
插值
可视化
1.5 scipy.interpolate.RBFInterpolator
执行N 维径向基函数 (RBF) 插值。
假设函数可以由RBF(Radial basis functions)径向基函数近似表示,把它代入微分方程并且在某个数据点集上在某种度量下迫使微分方程的误差取最小值,从而决定系数[公式],甚至点[公式],这个方法在一些实际应用领域也获得了非常满意的结果,可视化曲线更具光滑。
scipy.interpolate包里有Rbf函数。径向基函数可用于平滑/插值 N 维的散乱数据,但应谨慎用于观测数据范围外的外推。
应用举例
1.6 scipy.interpolate.Rbf
执行用于从 ND 散乱数据到 MD 域的函数的径向基函数插值的类。
应用举例:
针对非结构网格数据插值,似乎上述五种方法均可以,但是到底不同方法的插值效果又何区别,似乎不是太清晰。因此我们重点比较了两种算法常用的(scipy.interpolate.griddata和scipy.interpolate.RBFInterpolator。通过验证的整个流程用来学习如何选择自己合适的插值算法。
为了更好选择数据以及插值目的,我们降以下设置:
我将使它们接受两种插值任务和两种底层函数(要插值的点)。具体例子将演示二维插值,但可行的方法适用于任意维度。每种方法都提供了多种插值;在所有情况下,我都会使用三次插值。重要的是要注意,无论何时使用插值,与原始数据相比都会引入偏差,并且所使用的特定方法会影响最终得到的伪像。
这两个插值任务将是:
这两个底层函数将是:
2.1 光滑函数上采样插值测试
从等值线结果中,差别不是明显!
2.2 非光滑函数上采样插值测试
从等值线结果中,差别不是明显!
2.3 光滑函数在分散数据插值测试
从等值线结果中,RBFInterpolator更优!
2.4 非光滑函数在分散数据插值测试
从等值线结果中,RBFInterpolator更优!
简而言之
scipy.interpolate.griddata
scipy.interpolate.RBFInterpolator