gpt4 book ai didi

python - 将 hdf5 文件加载到 python xarrays

转载 作者:太空宇宙 更新时间:2023-11-04 00:04:31 30 4
gpt4 key购买 nike

python 模块 xarray 极大地支持加载/映射 netCDF 文件,甚至可以懒惰地使用 dask。

我必须使用的数据源是数以千计的 hdf5 文件,其中包含许多组、数据集和属性——所有这些都是使用 h5py 创建的。

问题是:如何将 hdf5 数据(数据集、元数据...)加载到 xarray 数据集结构中?

有没有人有这方面的经验或遇到过类似的问题?谢谢!

最佳答案

一个可能的解决方案是在无盘非持久模式下使用 netCDF4 打开 hdf5 文件:

ncf = netCDF4.Dataset(hdf5file, diskless=True, persist=False)

现在您可以检查文件内容,包括

之后你可以使用xarray.backends.NetCDF4DataStore打开想要的hdf5-groups(xarray一次只能获取一个hdf5-groups ):

nch = ncf.groups.get('hdf5-name')
xds = xarray.open_dataset(xarray.backends.NetCDF4DataStore(nch))

这将为您提供一个数据集 xds,其中包含所有属性和变量(数据集)组 hdf5-name。请注意,您将无法访问子组。您将需要通过相同的机制声明子组。如果你想应用 dask,你需要添加关键字 chunking 和想要的值。

没有(真正的)自动解码数据,就像这样可以对 NetCDF 文件进行解码。如果您有一个整数压缩二维变量(数据集)var,其中包含一些属性 gainoffset,您可以添加 NetCDF 特定属性 scale_factor add_offset 到变量:

var = xds['var']
var.attrs['scale_factor'] = var.attrs.get('gain')
var.attrs['add_offset'] = var.attrs.get('offset')
ds = xarray.decode_cf(xds)

这将使用 netcdf 机制解码您的变量。

此外,您可以尝试为提取的维度提供有用的名称(您将得到类似 phony_dim_0phony_dim_1、...、phony_dim_N 之类的名称) 并将新的(如示例中的)或现有变量/坐标分配给这些维度以获得尽可能多的 xarray 机制:

var = xds['var']
var.attrs['scale_factor'] = var.attrs.get('gain')
var.attrs['add_offset'] = var.attrs.get('offset')
dims = var.dims
xds['var'] = var.rename({dims[0]: 'x', dims[1]: 'y'})
xds = xds.assign({'x': (['x'], xvals, xattrs)})
xds = xds.assign({'y': (['y'], yvals, yattrs)})
ds = xarray.decode_cf(xds)

引用资料:

关于python - 将 hdf5 文件加载到 python xarrays,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54629358/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com