2012-12-22 261 views
3

我正在写一个使用python 2.7的程序,并且有困难指出插入/拟合某些矩形数据的最佳方法。Python - 拟合二维矩形数据

我有一堆已知的数据点格式为z = f(x,y),其中x和y在网格上均匀分布。我的x点范围从0到100,增量为0.1。我的y点范围从0到100,以2为增量。

我的问题是插值或拟合这些数据是我的y数据坐标之间的大间距。我正在寻找适合此数据的最佳方法,以便我可以评估任何(X,Y)坐标对的高度Z.我希望得到的表面尽可能平滑。使用griddata或rectbivariatepline的传统方法不会产生光滑的表面 - 看起来是因为我的y点之间的空间比我的x点之间的空间大得多。

我考虑过的一个选择是使用polyfit(或类似的东西)来拟合每个切片的多项式(每个X处的Y对Z曲线),然后将这些切片内插到一起以产生更平滑的表面。这似乎是一种迂回的做事方式。这是我最好的选择吗?片装配到多项式的

例如: fitting data

如果拟合多项式,我的每个切片(Y VS在固定X Z)大致是高斯或双峰的。他们是相当简单的分布。

我的目标是能够生成一个平滑,紧密贴合的表面,以3D或pcolor样式图显示。我需要避免经过Zmax和Zmin的波动。我知道这是使用样条线时的问题。

我的目标:

goal surface

感谢您的帮助,您可以提供。如果您需要详细说明,我会仔细观察此线索并快速回复。

编辑:

从我看过,好像我所寻找的是一个保形性质的Python为2D数据插值方法。我需要沿着用于matlab的芯片线,但表面。我已经浏览了所有的文档,并且找不到任何能够保证表面光滑的形状。使用的GridData,或rectbivariatespline

+0

我离开我的办公桌,但我确实相信有正则化的样条插值方法。可能值得研究。 – YXD

+0

您是否尝试过[map_coordinates](http://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.interpolation.map_coordinates.html)? – tiago

回答

2

常规方法做没有 产生光滑的表面 - 似乎是因为我 Ÿ点之间的空间比我的X点”

你应该尝试缩放之间的空间更大你的y坐标适当---至少griddata假设一个欧氏度量标准,即所有维度的长度尺度是相似的。

如果你另一方想要保形插值,请参阅我的回答here但是,这样的插值不会做任何平滑处理,所以也许这不是你想要的。

+0

谢谢你的形状保存解决方案。我将在今天下午尝试实施。当你说pchip方法不会做任何平滑处理时,它仍然会产生一个更光滑的曲面,比如说线性插值 - 正确吗?由于峰值将被舍入而不是锯齿状的点? 这就是我从阅读中收集到的结果: http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Interpolating_a_data_set – user1764386

+0

是的,IIRC它会产生一个具有连续导数的曲面,但仍然会插入所有数据点。 –

0

你可以试试我的BSD许可numpy的和SciPy的基础曲线,以及在谷歌代码库曲面拟合库:

http://code.google.com/p/pyeq2/downloads/list

它有很多例子,包括对性能的Python并行编程。既然它是免费的,它不会花费任何东西来尝试它。

James