Я создал функцию для выбора данных 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)