从高分辨率到低分辨率重采样阵列

时间:2012-10-05 13:36:52

标签: numpy matplotlib python-2.7 scipy

我有一个问题,我无法使用scipy正确解决。我想要 重新采样和数组,以便我降低分辨率(从高到低),但是,在这里出现问题,新的数组形状不是旧的数组。 例如:

 lat = scipy.mgrid[-14.0:14+0.25:0.25]
 lon = scipy.mgrid[100.0:300+0.25:0.25]
 z = rand((lat.shape[0],lon.shape[0]))
 new_res = 0.70135

现在我有一个空间分辨率为0.25的数组z,我希望将其减少到new_res。任何想法如何使用scipy或手工完成?更复杂的是,数据z中通常会存在不良数据,即z [0.20]可能是nan。

感谢您的帮助和想法

1 个答案:

答案 0 :(得分:2)

快速执行此操作的方法是使用scipy.ndimage.interpolation.map_coordinates

lat = scipy.mgrid[-14.0:14+0.25:0.25]
lon = scipy.mgrid[100.0:300+0.25:0.25]
z = tile(lon,(len(lat),1))
new_res = 0.70135


new_lat = scipy.mgrid[-14.0:14+0.25:new_res]
new_lon = scipy.mgrid[100.0:300+0.25:new_res]
X,Y = meshgrid(((new_lat-np.min(lat))/(np.max(lat)-np.min(lat)))*lat.shape[0],((new_lon-np.min(lon))/(np.max(lon)-np.min(lon)))*lon.shape[0])
pts = np.asarray(zip(X.ravel(),Y.ravel())).T
new_z = scipy.ndimage.interpolation.map_coordinates(z,pts).reshape(len(new_lon),len(new_lat)).T

meshgrid来电中的所有混乱都是转换真实单位 - >阵列单位。我不确定这将如何处理NaN,我怀疑您必须首先清理数据或接受重新采样后NaN增长的区域。

tutorial也可能有用。