如何以 HDF5 格式存储非常大的 3 维矩阵?

How to store very large 3 dimensional matrix in HDF5 format?

我有一个非常大的矩阵,它是作为帧数组的视频文件,每个帧的分辨率大约为 350x250。我在一个视频文件中有大约 8,000-10,000 个这样的帧,大小约为 1-1.5GB。 我认为 HDF5 是一种适合我使用的文件格式,因为我必须对文件执行大量数学运算(跨越整个深度列)。 我的问题是我无法将此 3D 矩阵存储在 HDF5 中。有人可以建议我如何以增量方式将这些帧存储为 hdf5 格式的 3D 矩阵(逐帧添加到 hdf5 文件)吗? 我正在使用 h5py python 包。

例如,假设您的视频有 10 帧,分辨率为 200x200 像素。因此,您必须创建一个尺寸为 10 x 200 x 200 x 3 且数据类型为 uint8 的数据集(每个 RGB 分量使用 8 个无符号位)。这是如何传输到 h5py api。查看 docs 了解详情。

import h5py
import numpy as np

# create an hdf5 file
with h5py.File("/tmp/videos.h5") as f:
    # create a dataset for your movie
    dst = f.create_dataset("myvideo", shape=(10, 200, 200, 3),
                           dtype=np.uint8)
    # fill the 10 frames with a random image
    for frame in range(10):
        dst[frame] = np.random.randint(255, size=(200, 200, 3))