在Python

时间:2016-11-16 00:32:17

标签: python interpolation matplotlib-basemap

我无法想出将非规则网格上的卫星数据转换为全球0.25 x 0.25度网格的最有效方法。

我有一个二维卫星数据阵列,以及两个相应的二维阵列,给出每个像素的纬度和经度。

当我使用pcolormesh绘图时,它看起来像这样:

m.pcolormesh(lon, lat, windSpeed)

enter image description here

我想将这些数据插入0.25 x 0.25 deg网格

lonGrid = arange(-180, 180, res)
latGrid = arange(-90, 90, res)
lonGrid,latGrid = meshgrid(lonGrid,latGrid)

我已经尝试过使用mpl_toolkits.basemap.interp()函数,但我无法弄清楚如何让我的lat和lon点对我单调增加,这是函数所需要的。我可以ravel()我的lon网格,将它排序为增加,然后使用argsort以相同的方式对windSpeed和lat网格进行排序......但是lat不会单调增加。

lon = lon.ravel()
lat = lat.ravel()
windSpeed = windSpeed.ravel()

lon[lon > 180] = lon[lon > 180] - 360

lonSortInds = argsort(lon)

result = mpl_toolkits.basemap.interp(windSpeed2, lon2, lat2, lonGrid, latGrid, checkbounds=False, masked=True, order=1)

lat = lat[lonSortInds]
windSpeed = windSpeed[lonSortInds]

lon = sort(lon)

result = mpl_toolkits.basemap.interp(windSpeed, lon, lat, lonGrid, latGrid, checkbounds=False, masked=False, order=1)
  

ValueError:xin和yin必须增加!

最好的办法是什么?

1 个答案:

答案 0 :(得分:0)

在我刚刚遇到的类似错误中,我通过执行不同类型的重新订购来修复它。

如果您的纬度没有增加,您可以尝试:

np.flipud(lat) np.flipud(windSpeed)

或者如果它的经度没有增加那么:

np.fliplr(lon) np.fliplr(windSpeed)

这解决了我遇到的类似问题。