Мне нужно скорректировать данные по нерегулярной сетке (конус lambert) в обычную сетку. Я думаю, что мой лучший выбор. Infact мой оригинальный lat, lon не 1D (что, кажется, необходимо использовать basemap.interp или scipy.interpolate.griddata).понимание pyresample для регрессии нерегулярных данных сетки к регулярной сетке
Я нашел this SO's answer полезной. Однако я получаю пустые интерполированные данные. Я думаю, что это связано с выбором моего радиуса влияния и тем фактом, что мои данные завернуты (??).
Это мой код:
import numpy as np
from matplotlib import pyplot as plt
import netCDF4
%matplotlib inline
url = "http://www.esrl.noaa.gov/psd/thredds/dodsC/Datasets/NARR/Dailies/monolevel/hlcy.2009.nc"
SRHtemp = netCDF4.Dataset(url).variables['hlcy'][0,::]
Y_n = netCDF4.Dataset(url).variables['y'][:]
X_n = netCDF4.Dataset(url).variables['x'][:]
T_n = netCDF4.Dataset(url).variables['time'][:]
lat_n = netCDF4.Dataset(url).variables['lat'][:]
lon_n = netCDF4.Dataset(url).variables['lon'][:]
lat_n и lon_n нерегулярны и широта и долгота соответствующих прогнозируемых координат х, у.
Из-за пути lon_n есть, я добавил:
lon_n[lon_n<0] = lon_n[lon_n<0]+360
так что теперь, если я сюжет их они выглядят красиво и хорошо:
Затем я создаю свой новый набор регулярные координаты:
XI = np.arange(148,360)
YI = np.arange(0,87)
XI, YI = np.meshgrid(XI,YI)
В соответствии с вышеприведенным ответом мычание код:
из pyresample.geometry импорта SwathDefinition из pyresample.kd_tree импорта resample_nearest
def_a = SwathDefinition(lons=XI, lats=YI)
def_b = SwathDefinition(lons=lon_n, lats=lat_n)
interp_dat = resample_nearest(def_b,SRHtemp,def_a,radius_of_influence = 70000,fill_value = -9.96921e+36)
разрешение данных составляет около 30 км, поэтому я ставлю 70км, то fill_value я кладу это один из данных, но, конечно, я могу просто положить ноль или нано.
однако я получаю пустой массив.
Что делать неправильно? также - если есть другой способ сделать это, мне интересно узнать это. Документация Pyresample немного тонкая, и мне нужна дополнительная помощь.
Я нашел this answer предполагая использовать другую функцию GridData:
import matplotlib.mlab as ml
resampled_data = ml.griddata(lon_n.ravel(), lat_n.ravel(),SRHtemp.ravel(),XI,YI,interp = "linear")
и это, кажется, хорошо:
Но я хотел бы понять больше о pyresample, так как оно кажется настолько мощным.
это было трюк! он должен быть плавающим. – claire