こんにちは。
この記事では、Pythonでバイナリーデータを扱う際に躓いた点を共有させていただきます。
バイナリデータを扱う際のテンプレート文
はじめにバイナリーデータを開く関数を用意します。(numpy 読込済)
※本題ではありませんが、私の場合はdtypeのエンディアン設定でもよく躓きます。
def open_grd(gpv_file):
with open(gpv_file, 'rb') as ifile:
data = np.fromfile(ifile, dtype='>f', sep = '')
return data
本命の部分
ここで返ってきたデータを図化するために、データを格子系に整形を行います。
前提条件として、下記の条件に則ってデータが格納されていると考えます。
data_info = {
'nx' : 150,
'ny' : 100,
'data_path' : './your_data.grd'
}
data = open_grd(data_info['data_path']).reshape(
data_info['ny'], data_info['nx'], order='C' #! or 'F'
)
これらのように行うと、配信データかFortranで自作したデータかによってデータ配列が同じにも関わらず、上手くできた場合とできない場合がありました。
解決策としては、最後の文の末尾reshapeで変換順序を指定する必要があることを確認しました。
ndarray.reshape
の変換順序の引数は、デフォルトではorder='C'
となっています。
なので、Fortranなどで自作したバイナリーデータでは、order='F'
とする必要があります。
同じような点で困った人の手助けになれたら幸いです。
最後まで見ていただき、ありがとうございました。
参考
・NumPy配列ndarrayの形状を変換するreshapeの使い方
https://note.nkmk.me/python-numpy-reshape-usage/