Как разделить набор данных netcdf массива X на несколько значений x, y и времени? - PullRequest
0 голосов
/ 05 февраля 2019

Я создал функцию для выбора данных netcdf для одного x, y и времени, используя массив X, но как я могу ввести несколько значений x, y, времени (т. Е. Маршрут) и вернуть значения из netcdf?т.е. скорость ветра для серии х, у, временных рядов.

Единственный способ, которым я могу придумать, - это циклически проходить по моим массивам x, y, time и запускать функцию каждый раз, но это кажется очень неэффективным.Любые предложения по лучшему методу?

Мой входной набор данных:

| x y timestamp | | 0 77.49316 6.320333 2018-08-01 00:10:00+00:00 | 1 77.64450 6.287833 2018-08-01 00:44:00+00:00 | 2 77.98483 6.202500 2018-08-01 02:02:00+00:00

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

# Scan the folder for netcdf datasets and return variables
def listmodelvars(model):
    varlist = xr.open_mfdataset(os.path.join(model, '*.nc'))
    print(varlist.data_vars.keys())
    return varlist    

ds = listmodelvars(ncep_model)
KeysView(Data variables:
    tmp2m     (time, latitude, longitude) float64 dask.array<shape=(270, 311, 720), chunksize=(9, 311, 720)>
    rh2m      (time, latitude, longitude) float64 dask.array<shape=(270, 311, 720), chunksize=(9, 311, 720)>
    tmpsfc    (time, latitude, longitude) float64 dask.array<shape=(270, 311, 720), chunksize=(9, 311, 720)>
    pratesfc  (time, latitude, longitude) float64 dask.array<shape=(270, 311, 720), chunksize=(9, 311, 720)>
    prmslmsl  (time, latitude, longitude) float64 dask.array<shape=(270, 311, 720), chunksize=(9, 311, 720)>
    ugrd10m   (time, latitude, longitude) float64 dask.array<shape=(270, 311, 720), chunksize=(9, 311, 720)>
    vgrd10m   (time, latitude, longitude) float64 dask.array<shape=(270, 311, 720), chunksize=(9, 311, 720)>)
In [4]:

# Variables    
parameter = 'tmp2m'
start_date = '2018-08-01'
end_date = '2018-08-31'
lat = 0
lon = 0    

# Define a function to return time-series data for a single location    
def array_2d(model, parameter, start_date, end_date, lat, lon):
    data = xr.open_mfdataset(os.path.join(str(model), '*.nc'))[str(parameter)].sel(
        time=slice(str(start_date) + 'T00:00:00', str(end_date) + 'T00:00:00'), 
        latitude=lat, longitude=lon)
    return data    

data_2d = array_2d(ncep_model, parameter, start_date, end_date, lat, lon)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...