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_vars
或 coords
中。
但显然 netCDF-Python 库会很乐意将它们写成向量,默默地丢弃形状信息。 Xarray 或 NetCDF4-Python 在这些情况下确实应该引发错误。
如果你真的想,用当前版本的h5netcdf,你可以通过在xarray中指定engine='h5netcdf'
来读写多维属性。但请注意,这将创建大多数工具无法读取的非标准 netCDF 文件,我 considering removing 将来会使用 h5netcdf 的此功能。
我正在尝试使用二维数组作为属性来保存数据集,例如:
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_vars
或 coords
中。
但显然 netCDF-Python 库会很乐意将它们写成向量,默默地丢弃形状信息。 Xarray 或 NetCDF4-Python 在这些情况下确实应该引发错误。
如果你真的想,用当前版本的h5netcdf,你可以通过在xarray中指定engine='h5netcdf'
来读写多维属性。但请注意,这将创建大多数工具无法读取的非标准 netCDF 文件,我 considering removing 将来会使用 h5netcdf 的此功能。