2017-02-05 1 views
0

私は非常に大きなマトリックスを持っています。これは、それぞれ約350x250の解像度のフレームの配列としてのビデオファイルです。私は約1〜1.5GBのサイズの1つのビデオファイルに約8,000〜10,000のフレームを持っています。 私は、HDF5がファイルの数学的操作を(深さの列全体で)多く実行する必要があるため、私の使用に適したファイル形式であると考えました。 私の問題は、この3DマトリックスをHDF5に保存できないということです。誰かがhdf5形式の3Dマトリックスとして、これらのフレームをインクリメンタルな方法で(フレームをhdf5ファイルに追加する)私の方法を提案できますか? 私はh5py pythonパッケージを使用しています。非常に大きな3次元マトリックスをHDF5形式で保存する方法は?

+1

あなたは小さな配列を格納する方法を私たちに示し、(20,20)サイズの10個のフレームが言います。ヒント、(10,20,20)に設定されたデータを初期化し、 'data [i、:、:] = frame'を反復する。小さいデータの場合は、まずこれを実行してください。後で大きな問題に取り組むことができます。 – hpaulj

+0

ありがとう@hpaul。これは私の問題を解決しました。 –

答えて

1

例として、ビデオの解像度が200x200ピクセルの10個のフレームがあるとします。したがって、10 x 200 x 200 x 3のデータ型をデータ型uint8で作成する必要があります(各RGBコンポーネントは符号なし8ビットを使用します)。これはh5py apiへの転送方法です。詳細はdocsをご確認ください。 http://docs.h5py.org/en/latest/high/dataset.htmlからのアイデアを使用して

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)) 
+1

フレームがグレースケールの場合、データセットの形状はもちろん10 x 200 x 200になります。 – weatherfrog

+0

これは私が必要としていたものです。それは完璧に働いた! ありがとう! –

関連する問題