我正在使用python 2.7编写一个程序,并且我正在精确地指出插入/拟合某些矩形数据的最佳方法。
我有一堆格式为z = f(x,y)的已知数据点,其中x和y在网格上均匀分布。我的x点范围从0到100,增量为0.1。我的y点范围从0到100,增量为2.
我在插入或拟合此数据时的问题是我的y数据坐标之间的间距很大。我正在寻找适合这些数据的最佳方法,以便我可以评估任何(X,Y)坐标对的高度Z.我希望得到的表面尽可能光滑。使用griddata或rectbivariatespline的传统方法不会产生光滑的表面 - 似乎因为我的y点之间的空间远大于我的x点之间的空间。
我考虑的一个选项是使用polyfit(或类似的东西)将多项式拟合到每个切片(每个X处的Y对Z曲线),然后将这些切片内插在一起以产生更光滑的表面。这似乎是一种迂回的做事方式。这是我最好的选择吗?
将切片拟合到多项式的示例:
如果适合多项式,我的每个切片(固定X处的Y对Z)大致为高斯或双峰。它们是相当简单的发行版。
我的目标是能够生成一个平滑,紧密贴合的表面,以便在3D或pcolor样式图表中显示。我需要避免摆动超过Zmax和Zmin。我知道使用样条线时这是一个问题。
我的目标:
感谢您提供的任何帮助。如果您需要任何详细说明,我会仔细观察这个帖子并快速回复。
修改
从我所看到的,似乎我正在寻找的是用于2d数据的python中的形状保留插值方法。对于matlab我需要一些pchip的东西,但是对于表面来说。我查看了所有文档,找不到任何可以保证表面光滑的形状。
答案 0 :(得分:2)
使用griddata或rectbivariatespline的传统方法不行 产生光滑的表面 - 看似因为我之间的空间 y点远远大于我的x点之间的空间“
你应该尝试适当地缩放你的y坐标 - 至少griddata假定一个欧几里德度量,即所有维度的长度尺度都相似。
如果你在另一个想要保持形状的插值,请参阅我的答案here但是,这样的插值不会做任何平滑,所以也许这不是你想要的。
答案 1 :(得分:0)
您可以在Google Code存储库中尝试我的BSD许可的基于numpy和scipy的曲线和曲面拟合库:
http://code.google.com/p/pyeq2/downloads/list
它有很多例子,包括用于性能的Python并行编程。由于它是免费的,因此不需要花费任何费用。
詹姆斯