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

Numpy 将阵列从高分辨率重新采样到低分辨率,numpy,matplotlib,python-2.7,scipy,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,我想把它减少到新的

我有一个问题,我无法使用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,我想把它减少到新的分辨率。你知道如何使用scipy或手工来实现吗?更复杂的是,数组z中经常会存在坏数据,即z[0.20]可能是nan


感谢您的帮助和想法

一个快速的方法是使用

meshgrid
调用中的所有混乱都是转换实际单位->数组单位。我不确定这将如何处理
NaN
,我怀疑您必须首先清理数据,或者在重新采样时接受
NaN
增长的区域


这可能也很有用。

我正在努力理解您的代码。有很多事情我都不明白——不像python程序员那样。我希望尽可能避免对数据进行任何插值。我将测试此代码并查看。谢谢。如果你想对数据进行下采样,而不是简单地对像素的平方求和,那么你必须做一些插值。在轴约定的差异方面存在一些问题,这使得该代码比严格必要的代码更加复杂。是的,你是对的。我尝试求平方和,但这会导致更复杂的方法和代码。我尝试了你的方法,结果在某些地方变得过于嘈杂和错误。我认为这是因为数据类型是非常数字化的。@Shejo284尝试将顺序设置为1。默认顺序为3,如果有锋利的边缘,则会产生巨大的瑕疵<代码>地图坐标(z,pts,顺序=1)
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