fortranで得られたバイナリデータをpythonで読み込む方法を説明する。
重要なのはf90ファイルのopenのところにaccess="stream"を加える。また、status='replace'にする。
バイナリファイルで出力すると効率的に読み込める
サンプルプログラムを以下に示す。(なぜかcatだけだと表示されないので、duも書いておく。)
!cat sin_curve.f90
!gfortran sin_curve.f90
!./a.out
!du -h sin_curve.d
pythonで読み込むときにはnumpyのfromfileを使うと高速。
import numpy as np
f=open('sin_curve.d','rb')
%time data=np.fromfile(f,dtype='float64').reshape(-1,1000)
np.shape(data)
import matplotlib.pyplot as plt
plt.imshow(data,aspect='auto',origin='lower');
plt.show()
書式ありファイルで出力した時の例を以下で示す。
サンプルプログラムは以下。
!cat sin_curve2.f90
!gfortran sin_curve2.f90
!./a.out
!du -h sin_curve2.d
import numpy as np
f=open('sin_curve2.d','r')
%time data2=np.fromfile(f,dtype='float64',sep=" ").reshape(-1,10000)
np.shape(data2)
import matplotlib.pyplot as plt
plt.imshow(data2,aspect='auto',origin='lower');
plt.show()
書式ありファイルの場合はpd.read_csvを使うと高速。
import pandas as pd
f=open('sin_curve2.d','r')
%time data3=np.array(pd.read_csv(f,delim_whitespace=True, header=None,dtype='float64'))
np.shape(data3)
import matplotlib.pyplot as plt
plt.imshow(data3,aspect='auto',origin='lower');
plt.show()