插补多维数据的首选和有效方法是什么?


22

插补多维数据的首选和有效方法是什么?

我担心的事情:

  1. 性能和构造记忆,单次/批处理评估
  2. 处理尺寸从1到6
  3. 线性或高阶
  4. 获得梯度的能力(如果不是线性的)
  5. 常规与分散网格
  6. 用作插值函数,例如查找根或最小化
  7. 外推能力

是否有有效的开源实现?

我对scipy.interpolate和来自scikit-learn的kriging感到幸运。

我没有尝试样条曲线,切比雪夫多项式等。

到目前为止,我在该主题上发现了以下内容:

矩形网格上的Python 4D线性插值

快速插值定期采样的3D数据(在x,y和z中具有不同的间隔)

快速插值常规网格数据

哪种多元分散插值方法最适合实际使用?


1
您想要什么插值?您的输入数据如何?我认为维数不会改变很多问题。
nicoguaro

2
不幸的是,多元插值不如单变量那么容易。例如,在一维中,您可以选择任意插值节点(只要它们互不相同),并始终获得一定程度的唯一插值多项式。在2D中已经不是真的,并且根据选择节点的方式,可能没有明确定义的多项式插值问题。简而言之,您必须向我们提供有关数据结构的更多信息,以获得有用的输入。
cfh 2015年

1
如果您想采用这种方法,这里是有关多元多项式逼近的调查:Gasca&Sauer,“多项变量的多项式插值”,2000citeseerx.ist.psu.edu/viewdoc/…
cfh

3
稀疏(例如Smolyak)网格上的Chebyshev多项式对于较大的维数非常快。网格点是切比雪夫点的预定子集。一些实现:tasmanian.ornl.govians.uni-stuttgart.de / spinterp
Ronaldo Carpio

1
您可以在歧管上尝试类似Delaunay细分的方法。
EngrStudent-恢复莫妮卡2015年

Answers:


14

对于我的问题的第一部分,我发现这个非常有用的比较对于使用python库的不同线性插值方法的性能而言:

http://nbviewer.ipython.org/github/pierre-haessig/stodynprog/blob/master/stodynprog/linear_interp_benchmark.ipynb

以下是到目前为止收集的方法列表。

标准插值,结构化网格:

http://docs.scipy.org/doc/scipy-dev/reference/generated/scipy.ndimage.interpolation.map_coordinates.html

http://docs.scipy.org/doc/scipy/reference/generation/scipy.interpolate.RegularGridInterpolator.html

https://github.com/rncarpio/linterp/

非结构化(分散)网格:

http://docs.scipy.org/doc/scipy/reference/generation/scipy.interpolate.LinearNDInterpolator.html#scipy.interpolate.LinearNDInterpolator

http://docs.scipy.org/doc/scipy/reference/generation/scipy.interpolate.griddata.html

http://docs.scipy.org/doc/scipy/reference/generation/scipy.interpolate.Rbf.html

2个包含插值的大型项目:

https://github.com/sloriot/cgal-bindings(CGAL的一部分,许可的GPL / LGPL)

https://www.earthsystemcog.org/projects/esmp/(伊利诺伊大学-NCSA许可证〜= MIT + BSD-3)

稀疏网格:

https://github.com/EconForge/Smolyak

https://github.com/EconForge/dolo/tree/master/dolo/numeric/interpolation

http://people.sc.fsu.edu/~jburkardt/py_src/sparse_grid/sparse_grid.html

https://aerodynamics.lr.tudelft.nl/~rdwight/work_sparse.html

https://pypi.python.org/pypi/puq

克里格(高斯过程):

http://scikit-learn.org/stable/modules/generation/sklearn.gaussian_process.GaussianProcess.html

https://github.com/SheffieldML/GPy

https://software.sandia.gov/svn/surfpack/trunk/

http://openmdao.org/dev_docs/_modules/openmdao/lib/surrogatemodels/kriging_surrogate.html

通用GPL许可:

https://github.com/rncarpio/delaunay_linterp

塔斯马尼亚人

自适应随机建模和非侵入式逼近工具包-是用于高维积分和插值以及参数校准的强大库。

塔斯马尼亚语的Python绑定:

https://github.com/rncarpio/py_tsg

https://github.com/sloriot/cgal-bindings(CGAL的一部分,许可的GPL / LGPL)


2
我还要补充一点,来自sandia的非常出色的DAKOTA软件包已实现了上述所有方法以及更多方法,并且确实提供了python绑定。它可能不是最简单的启动和运行,但是它是一流的,并提供了很多选择,值得一试。
Aurelius

@Aurelius您能否指向DAKOTA中的插值/逼近例程?我对该程序包有经验,但只注意到kriging的surfpack(已经在ref-d以上)。
denfromufa 2015年


@Aurelius所有的达科他近似模型都在冲浪包中
denfromufa 2015年

这是血腥的王牌。做得好!
阿斯特丽德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.