Python模块xarray非常支持加载/映射netCDF文件,甚至可以使用dask进行懒加载。
我需要处理的数据源是成千上万个hdf5文件,其中有大量组、数据集和属性 - 所有这些都是使用h5py创建的。
问题是:如何将hdf5数据(数据集、元数据等)加载到xarray数据集结构中(最好使用dask进行懒映射)?
是否有人对此有经验或遇到过类似的问题? 谢谢!
Python模块xarray非常支持加载/映射netCDF文件,甚至可以使用dask进行懒加载。
我需要处理的数据源是成千上万个hdf5文件,其中有大量组、数据集和属性 - 所有这些都是使用h5py创建的。
问题是:如何将hdf5数据(数据集、元数据等)加载到xarray数据集结构中(最好使用dask进行懒映射)?
是否有人对此有经验或遇到过类似的问题? 谢谢!
ncf = netCDF4.Dataset(hdf5file, diskless=True, persist=False)
groups
。xarray.backends.NetCDF4DataStore
打开所需的hdf5-group(xarray
一次只能获取一个hdf5-group):nch = ncf.groups.get('hdf5-name')
xds = xarray.open_dataset(xarray.backends.NetCDF4DataStore(nch))
xds
,其中包含组 hdf5-name
的所有属性和变量(数据集)。请注意,您将无法访问子组。您需要使用相同的机制声明子组。如果您想应用 dask
,则需要添加关键字 chunking
并设置所需值。gain
和 offset
的整数压缩 2D 变量(数据集)var
,则可以向该变量添加 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)
phony_dim_0
、phony_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)
xarray
模块,但是h5py
可以将 HDF5 数据作为numpy
记录数组访问。因此,您只需将 hdf5 数据集作为记录数组访问,并将数据转换为 xarray 数据集格式即可。 - kcw78