2016-09-17 70 views
1

試圖插值從一個普通的輸入柵格數據,並遇到了這個文檔中的scipy.interpolate.interp2dScipy的RectBivariateSpline返回錯誤的值?

參見RectBivariateSpline快得多2D插值如果您 輸入數據網格上的

所以我嘗試使用scipy.interpolate.RectBivariateSpline而不是interp2d。這兩種功能的文件似乎非常相似,所以我期望這會產生類似的結果:

import numpy as np 
from scipy.interpolate import RectBivariateSpline, interp2d 

from .constants import data 


x_coords = y_coords = np.arange(data.shape[0]) # Square array 
interp_fun = interp2d(x_coords, y_coords, data) 
bivar_fun = RectBivariateSpline(x_coords, y_coords, data) 

data[250, 60] # 76.1451873779 
interp_fun(60, 250) # 76.14518738 
bivar_fun(60, 250, grid=False) # 345.24444 

我是否打電話錯了?我不知道爲什麼插值基於RectBivariateSpline是如此遙遠?

我懷疑RectBivariateSpline可能在笛卡爾網格上運行,並顛倒了輸入數據的y軸,但仍然沒有運氣。

回答

1

權,只是提交此之前,我想我應該嘗試調用bivar_fun(y, x)代替bivar_fun(x, y),事情突然工作:

data[250, 60] # 76.1451873779 
interp_fun(60, 250) # 76.14518738 
bivar_fun(250, 60, grid=False) # [ 76.14518738] 

還是不明白爲什麼,因爲第一個參數interp_funbivar_fun應該是相同的:

RectBivariateSpline.__call__(x, y, mth=None, dx=0, dy=0, grid=True)

RectBivariateSpline Docs

interp2d.__call__(x, y, dx=0, dy=0)

Interp2d Docs

還有Github上一個相關的問題:https://github.com/scipy/scipy/issues/3164