Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python xarray 向xarray创建的netCDF文件添加新维度_Python Xarray - Fatal编程技术网

Python xarray 向xarray创建的netCDF文件添加新维度

Python xarray 向xarray创建的netCDF文件添加新维度,python-xarray,Python Xarray,我有一个大的数据集,数据组装中心希望在其中添加一个新变量idstring,并添加一个新维度idstring\u len。(我不知道他们为什么想把它作为一个新变量,而不是一个属性,但是…) 所以我有 将xarray作为xr导入 将numpy作为np导入 ds=xr.Dataset() ds['time']=('time',名词短语arange(1000)) ds['boo']=('time',np.randome.randn(1000)) #文件保存在这里,然后“打开数据集”再次获取它。 ds['

我有一个大的
数据集
,数据组装中心希望在其中添加一个新变量
idstring
,并添加一个新维度
idstring\u len
。(我不知道他们为什么想把它作为一个新变量,而不是一个属性,但是…)

所以我有

将xarray作为xr导入
将numpy作为np导入
ds=xr.Dataset()
ds['time']=('time',名词短语arange(1000))
ds['boo']=('time',np.randome.randn(1000))
#文件保存在这里,然后“打开数据集”再次获取它。
ds['idstr_len']=('idstr_len',50)
ds['idstring']=('idstr_len','my_help_ID_string')
但这给了我在
ds['idstr_len']=…

ValueError: dimensions ('idstr_len',) must have the same length as the number of data dimensions, ndim=0
因此,我确信有一种很好的方法可以在事后向数据集添加维度,但我不确定它是什么

编辑:对于更多上下文,他们建议在原始netcdf中执行此操作的方式是:

轨迹\u字符串='glider YYYYmmddTHHMM'
轨迹=nc.createDimension('traj_strlen',len(轨迹字符串))
轨迹=nc.createVariable('轨迹',
"S1",,
('traj_strlen',))

我想我可以在事后使用原始netcdf接口来完成所有这些

如果将带有字符串变量的数据集写入netCDF文件,xarray实际上会创建一个伪字符串长度维度,例如,考虑:

import xarray
ds = xarray.Dataset({'idstring': 'my_helpful_ID_string'})
ds.to_netcdf('mydata.nc')
ncdump
显示数据具有虚拟维度
string20

$ ncdump mydata.nc
netcdf mydata {
dimensions:
    string20 = 20 ;
variables:
    char idstring(string20) ;
        idstring:_Encoding = "utf-8" ;
data:

 idstring = "my_helpful_ID_string" ;
}
这是必需的,因为netCDF的字符类型仅表示单个字符

Xarray不会让您直接控制此维度名称,但您可以在事后使用netCDF4对其进行修改,例如

import netCDF4
with netCDF4.Dataset('mydata.nc', 'r+') as nc:
    nc.renameDimension('string20', 'idstring_strlen')

如果将带有字符串变量的数据集写入netCDF文件,xarray实际上会创建虚拟字符串长度维度,例如,考虑:

import xarray
ds = xarray.Dataset({'idstring': 'my_helpful_ID_string'})
ds.to_netcdf('mydata.nc')
ncdump
显示数据具有虚拟维度
string20

$ ncdump mydata.nc
netcdf mydata {
dimensions:
    string20 = 20 ;
variables:
    char idstring(string20) ;
        idstring:_Encoding = "utf-8" ;
data:

 idstring = "my_helpful_ID_string" ;
}
这是必需的,因为netCDF的字符类型仅表示单个字符

Xarray不会让您直接控制此维度名称,但您可以在事后使用netCDF4对其进行修改,例如

import netCDF4
with netCDF4.Dataset('mydata.nc', 'r+') as nc:
    nc.renameDimension('string20', 'idstring_strlen')

谢谢Stefan,很好用。这是一个有点黑客,但这是对该格式的要求!谢谢Stefan,很好用。这是一个有点黑客,但这是对该格式的要求!