2016-09-13 4 views
0

Мне нужно скорректировать данные по нерегулярной сетке (конус 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 

так что теперь, если я сюжет их они выглядят красиво и хорошо:

enter image description here

Затем я создаю свой новый набор регулярные координаты:

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") 

и это, кажется, хорошо:

enter image description here

Но я хотел бы понять больше о pyresample, так как оно кажется настолько мощным.

ответ

2

Проблема в том, что XI и XI являются целыми числами, а не плавают. Вы можете это исправить, просто делая

XI = np.arange(148,360.) 
YI = np.arange(0,87.) 
XI, YI = np.meshgrid(XI,YI) 

неспособности обрабатывать целые типы данных недокументированное, неинтуитивное, и, возможно, глючит поведение от pyresample.

еще несколько заметок о вашем стиле кодирования:

  • Это не нужно перезаписать XI и переменные Ю.И., вы не получите много этого
  • Вы должны просто загрузить набор данных NetCDF один раз и доступ к переменным через этот объект
+0

это было трюк! он должен быть плавающим. – claire

 Смежные вопросы

  • Нет связанных вопросов^_^