直接使用:
def store_in_h5(images, output_filename):
with h5py.File(output_filename, 'w') as hf:
data_group = hf.create_group('data')
label_group = hf.create_group('label')
for i, (data_patches, label_patches) in enumerate(images):
for j, (data, label) in enumerate(zip(data_patches, label_patches)):
if torch.is_tensor(data):
data = data.cpu().numpy()
if torch.is_tensor(label):
label = label.cpu().numpy()
data_group.create_dataset(f'data_{i}_{j}', data=data, compression="gzip", compression_opts=9)
label_group.create_dataset(f'label_{i}_{j}', data=label, compression="gzip", compression_opts=9)
H5PY
文档
https://docs.h5py.org/en/stable/
核心概念
HDF5文件是两种对象的容器:数据集(datasets),它们是类似数组的数据集合,以及组(groups),它们是类似文件夹的容器,用于存放数据集和其他组。在使用h5py时,需要记住的最基本的事情是:
组的工作方式类似于字典,数据集的工作方式类似于NumPy数组
假设有人发送给你一个HDF5文件,名为mytestfile.hdf5。(要创建此文件,请参见附录:创建文件。)你需要做的第一件事是打开该文件以供读取:
python
Copy
import h5py
f = h5py.File('mytestfile.hdf5', 'r')
File对象是你的起点。这个文件中存储了什么?记住,h5py.File的行为类似于Python字典,因此我们可以检查键:
python
Copy
list(f.keys())
['mydataset']
根据我们的观察,在该文件中有一个名为mydataset的数据集。让我们将数据集作为一个Dataset对象进行检查:
python
Copy
dset = f[‘mydataset’]
我们获得的对象不是一个数组,而是一个HDF5数据集。与NumPy数组一样,数据集具有形状(shape)和数据类型(dtype):
python
Copy
dset.shape
(100,)
dset.dtype
dtype('int32')
数据集还支持数组样式的切片操作。以下是如何从文件中的数据集读取和写入数据的示例:
python
Copy
dset[...] = np.arange(100)
dset[0]
0
dset[10]
10
dset[0:100:10]
array([ 0, 10, 20, 30, 40, 50, 60, 70, 80, 90])
更多信息,请参阅文件对象(File Objects)和数据集(Datasets)