ヘッダーつきバイナリデータを、好き勝手に色々とインストールできないサーバー上で処理したときの出力形式に関するメモ。
タイトルのようなことが起きて、色々試してみた結果のメモ。
結果的には、numpy.savez
を使って.npz
拡張子のファイルとして出力することにした。
というのも、エンディアンや配列のオーダー(列指向or行指向)を丁寧に扱うのがめんどい&混乱しそうで、結局pythonで読み込むのであれば全部numpyで完結させればええやんと思ったから。
- 使い方
np.savez('filepath/file.npz',var1=var1,var2=var2,...)
or
np.savez_compressed('filepath/file.npz',var1=var1,var2=var2,...)
二つの違いは、np.savez
:非圧縮、実行速度が速め?、np.savez
:圧縮、実行速度が遅め?。
以下はテストプログラムの結果。
""" データを読み込んだりする部分 今回は月毎のデータ1年分2.3GBのファイルから、 はじめの月のデータを読み込んでそれをアウトプット。 変数tに格納してある。 """ tmpdate = np.array(datetime(year,mon+1,1)) tstart = time.time() np.savez('test.npz',time=tmpdate,temp=t) tend = time.time() tstart2 = time.time() np.savez_compressed('test2.npz',time=tmpdate,temp=t) tend2 = time.time() print('np.savez: {0}'.format(tend-tstart)+'[sec]') print('np.savez_compressed: {0}'.format(tend2-tstart2)+'[sec]')
結果
np.savez: 11.986746072769165[sec] np.savez_compressed: 31.117304801940918[sec]
ちなみにファイルサイズは、test.npz
:886MB、test2.npz
:174MB。
使い分けが必要そうだ。