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

时间:2017-02-05 14:39:28

标签: python h5py

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

1 个答案:

答案 0 :(得分:3)

举个例子,我们假设您的视频有10帧,分辨率为200x200像素。因此,您必须使用数据类型uint8(每个RGB组件使用8个无符号位)创建尺寸为10 x 200 x 200 x 3的数据集。这是如何转移到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))