【问题标题】:Writing xarray list-type attributes to netCDF将 xarray 列表类型属性写入 netCDF
【发布时间】:2018-03-30 20:33:12
【问题描述】:

我希望有一个字符串列表作为 xarray Dataset 中的一个属性,它可以在序列化到 netCDF 后幸存下来。我相信这可以通过 netCDF-4 中的NC_STRING type 实现。 xarray 支持这一点,但在写入和读取 netCDF 文件后,我无法让它持续存在。在往返之后,attr 会返回并连接列表元素。我在想我可能必须设置一个编码参数,虽然我知道如何为变量执行此操作,但我不知道如何为属性设置。

import xarray as xr
ds = xr.Dataset()
ds.attrs['testing'] = ['a', 'b']
print(ds)

给予:

<xarray.Dataset>
Dimensions:  ()
Data variables:
    *empty*
Attributes:
    testing:  ['a', 'b']

现在,

ds.to_netcdf('asdf.nc')
ds = xr.open_dataset('asdf.nc', autoclose=True)
print(ds)

给予:

<xarray.Dataset>
Dimensions:  ()
Data variables:
    *empty*
Attributes:
    testing:  ab

更新

针对@jhamman 的评论,使用netCDF4 的netncattr_string 方法支持此行为:

import netCDF4 as nc
rg = nc.Dataset('test_string.nc', 'w', format='NETCDF4')
rg.setncattr_string('testing', ['a', 'b'])
rg.close()

在 test_string.nc 上运行 ncdump 会产生:

$ ncdump test_string.nc
netcdf test_string {

// global attributes:
        string :testing = "a", "b" ;
}

与以通常的方式设置属性相反,这会导致连接属性,就像上面的 xarray 创建 nc 时一样:

rg = nc.Dataset('test_normal.nc', 'w', format='NETCDF4')
rg.testing = ['a', 'b']
rg.close()

ncdump 结果:

$ ncdump test_normal.nc
netcdf test_normal {

// global attributes:
        :testing = "ab" ;
}

读取使用setncattr_string 创建的 .nc 文件会正确导入字符串列表作为 xarray 数据集中的属性:

ds = xr.open_dataset('test_string.nc')
print(ds)

给予:

<xarray.Dataset>
Dimensions:  ()
Data variables:
    *empty*
Attributes:
    testing:  ['a', 'b']

所以我想像 setncattr_string 这样的东西可以在 xarray 中实现来实现这一点?

【问题讨论】:

  • 我最初的想法是 netcdf/xarray 并不真正支持这一点。确实没有一种逻辑方法可以将不同字符串的数组存储为属性(在变量上是可行的)。 ncdump -h asdf.nc 产生了什么?
  • @jhamman:我已经更新了我的问题以解决您的评论。简而言之,我认为可以使用 netCDF4,只是不使用 xarray(还没有?:-)。
  • 我认为这值得作为 github 上的 xarray 的功能请求提出。我们也许可以在那里继续对话。

标签: python python-xarray


【解决方案1】:

将字符串列表编码为 xarray 中的属性 has been implemented,并且应该在下一个版本 (0.10.4) 中。

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 2018-03-10
    • 2023-03-30
    • 2018-04-07
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多