2013-05-08 41 views
1

我正試圖實現類似於在this post中有關在python中重新編寫的回覆。該帖子中的問題涉及到重新排列一個數組,使得輸出單元格將包含所有對其有貢獻的輸入單元格的平均值。問題在於,每個輸入單元只有(我認爲)對一個輸出單元有貢獻 - 也就是說,沒有真正的方法來解決輸入單元與兩個輸出單元重疊的情況。Numpy - Regrid with Averaging redux

我想知道是否有一種方法來推廣該方法來解決單元重疊問題 - 例如,如果我有兩個輸入箱,跨度從0到1和1到2,輸出單元跨度爲0.75到2,我想要採取某種加權平均來計算輸出單元格中的值,該值表示輸入單元跨越1到2應該比輸出單元多出4倍多於跨越0到1的輸入單元。

這不是插值本身,但幾乎所有我見過的嘗試做類似事情的方法都使用它。直接用例如np.interp進行插值的問題在於,如果多於一個輸入單元對輸出單元有貢獻,則該例程僅忽略一些點。

回答

0

我不太確定你在找什麼,但我現在正在做類似的工作。我有兩個統一的有限差分網格,我需要將信息從一個映射到另一個,然後再返回。此代碼適合我的需求。這個函數x_to_x創建一個矩陣M,這樣我可以將M的點積乘以網格a上的數據並在網格b上生成數據。

def x_to_x(xa, da, xb, db): 
    a = np.tile(xa, (np.size(xb), 1)) 
    b = np.tile(xb, (np.size(xa), 1)).T 
    a_l = a - da/2 
    a_r = a + da/2 
    b_l = b - db/2 
    b_r = b + db/2 
    x_l = np.maximum(a_l, b_l) 
    x_r = np.minimum(a_r, b_r) 
    return np.maximum(x_r - x_l, 0.)/db 

如果你有一個非均勻網格,DA和DB可以被標量的東西,例如像da = np.hstack(a[1:] - a[:-1], a[-1] - a[-2])進行調整。