У меня есть несколько файлов netCDF, которые я хочу объединить. Пример netCDF выглядит следующим образом.
import xarray as xr
import numpy as np
import cftime
Rain_nc = xr.open_dataset('filepath.nc', decode_times=False)
print(Rain_nc)
<xarray.Dataset>
Dimensions: (land: 67209, tstep:248)
Dimensions without coordinates: land, tstep
Data variables:
lon (land) float32...
lat (land) float32...
timestp(tstep) int32...
time (tstep) int32...
Rainf (tstep, land) float32...
измерение «земля» - это количество чисел от 1 до 67209, а «шаг» - это количество от 1 до 248.
переменные lat и lon - это значения широты и долготы в форме (67209,)
переменная time - это время в секундах с начала месяца (netcdf - это месяц)
Далее ive поменял местами измерения с «шага» на «время», преобразовал их для последующего объединения и установил координаты как долготу, широту и время.
rain_nc = rain_nc.swap_dims({'tstep':'time'})
rain_nc = rain_nc.set_coords(['lon', 'lat', 'time'])
rain_nc['time'] = cftime.num2date(rain_nc['time'], units='seconds since 2016-01-01 00:00:00', calendar = 'standard')
rain_nc['time'] = cftime.date2num(rain_nc['time'], units='seconds since 1970-01-01 00:00:00', calendar = 'standard')
это оставило меня со следующим набором данных:
print(rain_nc)
<xarray.Dataset>
Dimensions: (land: 67209, time: 248)
Coordinates:
lon (land)float32
lat (land)float32
* time (time)float64
Dimensions without coordinates: land
Data variables:
timestp (time)int32
Rainf (time, land)
print(rain_nc['land'])
<xarray.DataArray 'land' (land: 67209)>
array([ 0, 1, 2,..., 67206, 67207, 67208])
Coordinates:
lon (land) float32 ...
lat (land) float32 ...
Dimensions without coordinates: land
интересующая меня переменная Rainf выглядит следующим образом:
<xarray.DataArray 'Rainf' (time: 248, land: 67209)>
[16667832 values with dtype=float32]
Coordinates:
lon (land) float32 -179.75 -179.75 -179.75 ... 179.75 179.75
179.75
lat (land) float32 71.25 70.75 68.75 68.25 ... -16.25 -16.75
-19.25
* time (time) float64 1.452e+09 1.452e+09 ... 1.454e+09 1.454e+09
Dimensions without coordinates: land
Attributes:
title: Rainf
units: kg/m2s
long_name: Mean rainfall rate over the \nprevious 3 hours
actual_max: 0.008114143
actual_min: 0.0
Fill_value: 1e+20
Отсюда я хотел бы создать netCDF с размерами (время, широта, долгота) и переменной Rainf.
Я попытался создать новый netCDF (или изменить этот), но когда я пытаюсь передать переменную Rainf, она не работает, поскольку она имеет форму (248, 67209) и нуждается в форме (248, 67209, 67209). Несмотря на то, что текущее «наземное» измерение «Rainf» имеет координаты широты и долготы. Можно ли изменить форму этой переменной, чтобы у нее были измерения времени, широты и долготы?