2017-02-16 94 views
2

我有一組數據(存儲在2D numpy數組中)表示同一個問題的模擬。但是,每個模擬都來自不同的模型,這會導致每個模型的分辨率不同。例如,這些是一些模擬的大小:在Python中更改數據分辨率

  1. 1159 X 1367
  2. 144 X 157
  3. 72 X 82
  4. 446×500
  5. 135 X 151

我想要做的是將它們全部轉換爲相同的分辨率,例如144 x 157.我相信我必須執行插值,但是,我不確定在Python中使用哪種方法。

我一直在閱讀這些:

  1. scipy.interpolate.griddata
  2. scipy.ndimage.interpolation.zoom.html
  3. scipy.interpolate.RegularGridInterpolator.html
  4. scipy.ndimage.interpolation.map_coordinates.html

的(3)和(4)似乎符合最佳問題,但是,我不確定如何讓他們返回一個新的網格(2D)數據,機智h指定的分辨率。

+0

您的所有數據是否涵蓋相同的座標範圍?換句話說,是x(例如)0到3之間的所有測量值,以及y中的0到10之間的所有測量值? – James

+0

是的,它們都覆蓋相同的區域,但分辨率不同。 – pceccon

+0

這些正在模擬的數據是無噪聲的嗎? –

回答

0

事實證明,我可以用scipy.interpolate.RegularGridInterpolator.html解決這個問題:

import numpy as np 
import pylab as plt 

from scipy.interpolate import RegularGridInterpolator 

def regrid(data, out_x, out_y): 
    m = max(data.shape[0], data.shape[1]) 
    y = np.linspace(0, 1.0/m, data.shape[0]) 
    x = np.linspace(0, 1.0/m, data.shape[1]) 
    interpolating_function = RegularGridInterpolator((y, x), data) 

    yv, xv = np.meshgrid(np.linspace(0, 1.0/m, out_y), np.linspace(0, 1.0/m, out_x)) 

    return interpolating_function((xv, yv)) 

輸入:

enter image description here

輸出:

enter image description here