私はhdfファイルのコレクションをnumpyの配列に設定する方法を探していますが、各行はイメージのフラット化されたバージョンです。私が正確に意味するもの:hdfからnumpyのndarray - 速い方法
私のHDFファイルには、他の情報の他に、フレームごとの画像が格納されています。各ファイルには、512x424の画像で51フレームが保持されます。今私は300以上のhdfファイルを持っていて、画像ピクセルを1フレームあたり1つの単一ベクトルとして保存したいと思います。すべての画像のすべてのフレームが1つのnumpy ndarrayに格納されます。私がこれまでに得たもの
が非常に遅い方法であり、私は実際に私はより速くそれを作ることができるか見当がつかない:以下の写真は理解するのに役立つはずです。問題は、私の考えでは、最終的な配列があまりにも頻繁に呼び出されることです。最初のファイルは非常に高速に読み込まれますが、速度は急速に低下することがわかります。
私の現在のコード(現在のHDFファイルの数を印刷することにより観察):詳細については
os.chdir(os.getcwd()+"\\datasets")
# predefine first row to use vstack later
numpy_data = np.ndarray((1,217088))
# search for all .hdf files
for idx, file in enumerate(glob.glob("*.hdf5")):
f = h5py.File(file, 'r')
# load all img data to imgs (=ndarray, but not flattened)
imgs = f['img']['data'][:]
# iterate over all frames (50)
for frame in range(0, imgs.shape[0]):
print("processing {}/{} (file/frame)".format(idx+1,frame+1))
data = np.array(imgs[frame].flatten())
numpy_data = np.vstack((numpy_data, data))
# delete first row after another is one is stored
if idx == 0 and frame == 0:
numpy_data = np.delete(numpy_data, 0,0)
f.close()
、私は決定木を学習するためにこれを必要とします。私のhdfファイルは私のRAMよりも大きいので、メモリが節約された配列に変換されるので、より適切です。
すべての入力いただきありがとうございます。
アルゴリズムで一度に複数のフレームが必要ですか?私は速度低下がvstackへのすべての呼び出しから来ていると推測しており、あなたはそのようなことをする必要はないかもしれません。 – Elliot
また、 'if idx == 0とframe == 0:'の条件で何が起こっているのかよく分かりません。私はあなたがそれから0x217088要素配列を取得していると思います。 – Elliot
残念ながら、すべての機能スペースを使用するランダムなforrestsを使用します。たぶんscikitでそれらを養う方法の別のオプションがありますが、私はそのようなことを認識していません。 – muleque