使用python xarray创建一个空的netCDF4 char变量

时间:2020-01-09 22:24:23

标签: python char netcdf python-xarray

我想创建一个netCDF文件,其中存储了几个变量及其关联的坐标,以及一个空的char变量,该变量可用于存储各种投影元数据。

我已经尝试过了:

import xarray as xr
import numpy as np

#example variable
A=np.array([[1,2],[3,4]])

#example coords
x=np.array([10,20])
y=np.array([30,40])

#example netcdf creation with xarray
data_vars={'A':(['y','x'],A),
           'projection':np.str()}
coords={'x':x,
        'y':y}
dataset = xr.Dataset(data_vars=data_vars, coords=coords)
dataset['projection'].attrs['EPSG']='3413'

dataset.to_netcdf('path/to/file.nc')

这种方法将'projection'变量保存为char类型,但同时也为其分配了一个空字符串:

<xarray.Dataset>
Dimensions:     (x: 2, y: 2)
Coordinates:
  * y           (y) int64 30 40
  * x           (x) int64 10 20
Data variables:
    A           (y, x) int64 1 2 3 4
    projection  |S1 ''

如何使用xarray创建“投影”变量,使其只是一个空的存储变量,类型为char(在此表示为| S1),并且没有尺寸?

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

TL; DR:我还没有发表评论的名声,只能部分解决此问题,因为to_netcdf强制将维度分配给变量。

我对这个问题(同一个问题,为CRS设置了一个变量)走得更远:

data_vars = {
    'A':(['y','x'],A),
    'crs': np.array(b'', dtype='|S1')
}

其中|S1是单字节字符串的numpy数据类型。它在Python 3中的用法是discouraged,但是看来xarray.open_dataset正是以这种方式读取了已使用GDAL设置了CRS的netCDF,所以我尝试将其复制。使用to_netcdf写回时,一切似乎都很好-但ncdump -h向我展示了我的crs变量被分配了先前不存在的维度string1

$ ncdump -h impact.nc                                                                                                             
[truncated]
    char crs(string1) ;
        crs:inverse_flattening = 298.257223563 ;
        crs:spatial_ref = "GEOGCS[\"WGS 84\",DATUM[\"WGS_1984\",SPHEROID[\"WGS…"
[truncated]

我认为我将通过从Python调用gdal_translate来添加CRS来解决解决该问题。

相关问题