xarray:to_netcdf 将 2D 属性转换为 1D

xarray: 2D attribute converted to 1D by to_netcdf

我正在尝试使用二维数组作为属性来保存数据集,例如:

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')

但加载文件备份显示属性已更改为一维数组:

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

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

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

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

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

如果你真的想,用当前版本的h5netcdf,你可以通过在xarray中指定engine='h5netcdf'来读写多维属性。但请注意,这将创建大多数工具无法读取的非标准 netCDF 文件,我 considering removing 将来会使用 h5netcdf 的此功能。