如何从文件中提取一个非常大的 HDF5 数据集并写入另一个文件?

How to subset a very large HDF5 dataset from file and write to another file?

我有一个非常大的密集矩阵 (1M * 30K) 存储在一个 hdf5 文件中。我能够使用以下脚本使用 h5py 读取 hdf5 文件:

import numpy as np
import h5py

f = h5py.File('myFile.hdf5', 'r')
mat = f['matrix']
# sub_mat = mat[:, :1000]
# write sub_mat into another hdf5 file

我想对矩阵进行子集化以获得仅包含前 1000 列的 sub_mat 并将 sub_mat 写入另一个 hdf5 文件。请注意 sub_mat 的形状为 (1M * 1K),它也太大而无法加载到 RAM 中。我该怎么做?

查看h5py的文档后,发现h5py.Dataset有一个类方法write_direct可以直接将矩阵写入文件。

所以我需要做的是先创建另一个h5文件,然后创建一个数据集,调用这个方法将大矩阵直接写入文件:

import numpy as np
import h5py

f = h5py.File('myFile.hdf5', 'r')
mat = f['matrix']

f2 = h5py.File('mySubmat.hdf5', 'w')
dset = f2.create_dataset('sub_matrix', shape=(mat.shape[0], 1000), dtype=np.float32)
dset.write_direct(mat[:, :1000])
f2.close()