xarray:由to_netcdf转换为1D的2D属性

时间:2017-03-22 22:25:49

标签: python python-xarray

我正在尝试使用2D数组作为属性保存数据集,如下所示:

attrs = {'objects': np.array([(46.5, -42.5),(4.5, 44),(-69, -69),(-66.5, 73.5)])}
ds = xr.Dataset(data_vars, coords, attrs)
ds.to_netcdf('dataset.nc', engine='netcdf4', format='netCDF4')

但是重新加载文件会显示该属性已更改为1D数组:

data = xr.open_dataset('dataset.nc')
print(data.objects)

# array([ 46.5, -42.5,   4.5,  44. , -69. , -69. , -66.5,  73.5])

这可能是什么原因?我试过简单地传递一个元组列表,但结果是一样的。

1 个答案:

答案 0 :(得分:1)

NetCDF文件格式doesn't support multi-dimensional attributes。如果你想用xarray将多维数组存储到netCDF文件,它们应该在data_varscoords中。

但显然netCDF-Python库很乐意将它们写成矢量,默默地丢弃形状信息。在这些情况下,Xarray或NetCDF4-Python确实应该引发错误。

如果您真的想要,使用当前版本的h5netcdf,您可以通过在xarray中指定engine='h5netcdf'来读取和写入多维属性。但请注意,这将创建非标准的netCDF文件,这些文件在大多数工具中都不会被读取,并且我将来会{h3netcdf considering removing这个功能。