我正在尝试使用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])
这可能是什么原因?我试过简单地传递一个元组列表,但结果是一样的。
答案 0 :(得分:1)
NetCDF文件格式doesn't support multi-dimensional attributes。如果你想用xarray将多维数组存储到netCDF文件,它们应该在data_vars
或coords
中。
但显然netCDF-Python库很乐意将它们写成矢量,默默地丢弃形状信息。在这些情况下,Xarray或NetCDF4-Python确实应该引发错误。
如果您真的想要,使用当前版本的h5netcdf,您可以通过在xarray中指定engine='h5netcdf'
来读取和写入多维属性。但请注意,这将创建非标准的netCDF文件,这些文件在大多数工具中都不会被读取,并且我将来会{h3netcdf considering removing这个功能。