我有一组o数据(存储在2D numpy数组中)代表相同问题的仿真.但是,每个模拟都来自不同的模型,从而导致每个模型的分辨率不同.例如,以下是一些模拟的尺寸:
> 1159 x 1367
> 144 x 157
> 72 x 82
> 446 x 500
> 135 x 151
我想做的就是将它们全部转换为相同的分辨率,例如144 x157.我相信我必须执行插值,但是,我不确定在Python中使用哪种方法.
我一直在读这些:
> scipy.interpolate.griddata
> scipy.ndimage.interpolation.zoom.html
> scipy.interpolate.RegularGridInterpolator.html
> scipy.ndimage.interpolation.map_coordinates.html
(3)和(4)似乎最适合该问题,但是,我不确定如何使它们返回具有指定分辨率的新网格化(2D)数据.
解决方法:
事实证明,我可以使用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))
输入:
输出: