Python 3.x 使用两个坐标给出的尺寸通过Xarray保存NetCDF
我在geopandas中有地理信息。我有一个函数,可以通过Python 3.x 使用两个坐标给出的尺寸通过Xarray保存NetCDF,python-3.x,netcdf,geopandas,python-xarray,Python 3.x,Netcdf,Geopandas,Python Xarray,我在geopandas中有地理信息。我有一个函数,可以通过xarray将该信息保存到netcdf,如下所示 def write_ncfile(name, new_model, variables): ## Distinct latitudes lats=new_model.drop_duplicates(["ilat"], keep="first").geometry.y.values ## Distinct Longitudes
xarray
将该信息保存到netcdf,如下所示
def write_ncfile(name, new_model, variables):
## Distinct latitudes
lats=new_model.drop_duplicates(["ilat"], keep="first").geometry.y.values
## Distinct Longitudes
lons=new_model.drop_duplicates(["ilon"], keep="first").geometry.x.values
## Temporal store for DataArrays
temporal_dataset = {}
## Dimensions and coordinates
dims = ('lat', 'lon')
coords = dict(lat=lats, lon=lons)
## Variables to save
for variable in variables:
bcvar=new_model[variable].values
## Reshapes data to have sahpe of lats and lons
bcvar=np.reshape(bcvar, (-1, len(lons)))
ds = xr.DataArray(bcvar, dims=dims, coords=coords)
ds.attrs['long_name'] = descriptions[variable]
ds.attrs['_FillValue'] = 0
temporal_dataset[variable] = ds
## Create DataSet
DT=xr.Dataset(temporal_dataset)
## Save to file
makedirs(name, exist_ok = True)
filename="%s/%s.nc"%(name, name)
DT.to_netcdf(filename, format="NETCDF4_CLASSIC")
return None
如果基线地理网格是正方形的(lat-lon投影),那么这个代码工作得非常好,但是现在如果投影不是正方形的(ex-lambert),那么我需要将尺寸定义为2d数组而不是1d数组。我不知道该怎么做
我正试图在ncdump
dimensions:
lat:dim_lat
lon:dim_lon
variables:
double lat(lat, lon)
double lon(lat, lon)
double var1(lat, lon)
double var2(lat, lon)
当前代码将其另存为
dimensions:
lat:dim_lat
lon:dim_lon
variables:
double lat(lat)
double lon(lon)
double var1(lat, lon)
double var2(lat, lon)
我怎样才能改变这个
示例gdf:
ilat ilon geometry d_p T_P d_v T_V
22 0 0 POINT (-70.95000 -33.30000) 0.000000 0 0.000000 0
0 0 1 POINT (-70.85000 -33.30000) 383.862700 39674 120.439438 12448
1 0 2 POINT (-70.75000 -33.30000) 327.639330 33863 112.502638 11628
2 0 3 POINT (-70.65000 -33.30000) 320.808104 33157 96.602750 9984
3 0 4 POINT (-70.55000 -33.30000) 415.217240 42915 99.144774 10247
23 1 0 POINT (-70.95000 -33.40000) 0.000000 0 0.000000 0
4 1 1 POINT (-70.85000 -33.40000) 56.055971 5787 16.853605 17310
5 1 2 POINT (-70.75000 -33.40000) 6686.807845 690341 1992.373592 205691
6 1 3 POINT (-70.65000 -33.40000) 8812.040534 909749 3512.456618 362623
7 1 4 POINT (-70.55000 -33.40000) 5203.112762 537166 2015.376536 208066
24 2 0 POINT (-70.95000 -33.50000) 0.000000 0 0.000000 0
8 2 1 POINT (-70.85000 -33.50000) 133.485233 13765 40.937021 4222
9 2 2 POINT (-70.75000 -33.50000) 7358.668562 758846 2309.069300 238118
10 2 3 POINT (-70.65000 -33.50000) 10420.377036 1074578 3668.947758 378352
11 2 4 POINT (-70.55000 -33.50000) 6166.780423 635935 2047.500621 211144
12 3 0 POINT (-70.95000 -33.60000) 71.933395 74010 21.287101 2193
13 3 1 POINT (-70.85000 -33.60000) 1154.803477 118952 373.474444 38470
14 3 2 POINT (-70.75000 -33.60000) 1512.189352 155764 466.310819 48033
15 3 3 POINT (-70.65000 -33.60000) 7160.093545 737532 2095.296251 215828
16 3 4 POINT (-70.55000 -33.60000) 4870.217943 501661 1494.220152 153914
17 4 0 POINT (-70.95000 -33.70000) 767.033734 78919 241.884877 24887
18 4 1 POINT (-70.85000 -33.70000) 163.023696 16773 48.526857 4993
19 4 2 POINT (-70.75000 -33.70000) 632.011798 65027 207.326845 21332
20 4 3 POINT (-70.65000 -33.70000) 93.053338 9574 27.787137 2859
而函数的使用将是
write_ncfile("Trial", gdf, ["d_p", "d_v"])
在上面的示例中,使用上面的代码可以很好地保存信息,但我需要对其进行概括,以便在网格不是正方形网格时它可以工作。我也遇到了同样的问题,xarray在这一点上不是很直观。创建具有正确维度的
DataArray
的解决方案(注意,这是一个3D示例):
因此,代码中的循环应该如下所示:
coords = {
"latitude": (["lon", "lat"], latitude_grid),
"longitude": (["lon", "lat"], longitude_grid)}
dims = ['lon', 'lat']
for variable in variables:
bcvar=new_model[variable].values
## Reshapes data to have sahpe of lats and lons
bcvar=np.reshape(bcvar, (-1, len(lons)))
ds = xr.DataArray(bcvar, dims=dims, coords=coords)
ds.attrs['long_name'] = descriptions[variable]
ds.attrs['_FillValue'] = 0
temporal_dataset[variable] = ds
请根据您的最终跑步解决方案调整此选项。我也有同样的问题,xarray在这一点上不是很直观。创建具有正确维度的
DataArray
的解决方案(注意,这是一个3D示例):
因此,代码中的循环应该如下所示:
coords = {
"latitude": (["lon", "lat"], latitude_grid),
"longitude": (["lon", "lat"], longitude_grid)}
dims = ['lon', 'lat']
for variable in variables:
bcvar=new_model[variable].values
## Reshapes data to have sahpe of lats and lons
bcvar=np.reshape(bcvar, (-1, len(lons)))
ds = xr.DataArray(bcvar, dims=dims, coords=coords)
ds.attrs['long_name'] = descriptions[variable]
ds.attrs['_FillValue'] = 0
temporal_dataset[variable] = ds
可以根据您的最终跑步解决方案随意调整此选项