LoginSignup
4
0

More than 3 years have passed since last update.

Pythonのbinaryデータの扱いで詰まった話

Last updated at Posted at 2020-03-27

こんにちは。
この記事では、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/

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0