2012-12-22 60 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