yyの日記

大気海洋に関する研究の個人的備忘録です。

ヘッダーつきバイナリデータを、好き勝手に色々とインストールできないサーバー上で処理したときの出力形式に関するメモ。

タイトルのようなことが起きて、色々試してみた結果のメモ。 結果的には、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。

使い分けが必要そうだ。