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

Vis*_*tha 4 python h5py

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

wea*_*rog 5

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

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))
Run Code Online (Sandbox Code Playgroud)