如何从文件中提取一个非常大的 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()
我有一个非常大的密集矩阵 (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()