3

我正在使用 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。我知道这是使用样条线时的问题。

我的目标:

球门面

感谢您提供任何帮助。如果您需要任何详细说明,我会仔细查看此线程并快速回复。

编辑:

从我读过的内容来看,我正在寻找的是一种在 python 中用于 2d 数据的形状保持插值方法。我需要一些类似于 matlab 的 pchip 的东西,但是对于一个表面。我浏览了所有文档,但找不到任何可以保持表面光滑的形状。

4

2 回答 2

2

使用 griddata 或 rectbivariatespline 的传统方法不会产生光滑的表面 - 似乎是因为我的 y 点之间的空间比我的 x 点之间的空间大得多”

您应该尝试适当地缩放 y 坐标 --- 至少 griddata 假定一个欧几里德度量,即所有维度的长度比例都是相似的。

如果您另一方面想要保持形状的插值,请在此处查看我的答案。但是,这样的插值不会进行任何平滑处理,所以也许这毕竟不是您想要的。

于 2012-12-22T13:12:38.250 回答
0

您可以在 Google 代码存储库中尝试我的 BSD 许可的基于 numpy 和 scipy 的曲线和曲面拟合库:

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

它有很多例子,包括用于性能的 Python 并行编程。由于它是免费的,因此无需任何费用即可试用。

詹姆士

于 2012-12-23T13:20:22.910 回答