Интерполировать данные в сетку широты и долготы в Python

У меня возникли проблемы с поиском наиболее эффективного способа преобразования спутниковых данных из нестандартной сетки в глобальную сетку 0,25 x 0,25 градуса.

У меня есть 2D-массив спутниковых данных и два соответствующих 2D-массива, дающих широту и долготу каждого пикселя.

Когда я рисую это с помощью pcolormesh, это выглядит так:

m.pcolormesh(lon, lat, windSpeed)

введите описание изображения здесь

Я хочу интерполировать эти данные на сетку 0,25 x 0,25 градуса

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

Я пробовал возиться с функцией mpl_toolkits.basemap.interp (), но я не могу понять, как заставить мои точки lat и lon монотонно увеличиваться, что требуется для функции. Я могу ravel () мою сетку lon, отсортировать ее по возрастанию, а затем таким же образом отсортировать сетки windSpeed ​​и lat, используя argsort ... но тогда 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: синь и инь должны увеличиваться!

Как лучше всего это сделать?


person hm8    schedule 16.11.2016    source источник


Ответы (1)


В подобной ошибке, которая у меня только что была, я исправил ее, выполнив другой тип повторного заказа.

Если ваши широты не увеличиваются, вы можете попробовать:

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

или если долготы не увеличиваются, то:

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

Это решило аналогичную проблему, которая у меня была.

person ben5756    schedule 28.03.2017