我有一个问题,我无法使用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。
感谢您的帮助和想法
答案 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也可能有用。