ベクトルor多次元配列形式で保存されたbinary fileはnumpyのfromfile関数を使うと簡単に読み込める。
>> import numpy as np
>> a = np.fromfile(infile, np.float32) # float32の場合(その他にint8やfloat64なども可)
行列データであれば、fromfileの後にreshape関数で形を指定すれば良い。
>> a = np.fromfile(infile, np.float32).reshape([X, Y])
基本的にfromfile関数はデータを一度に全て読み込んでメモリに保存するので、HDDやSSD上でギガバイトを超えるサイズのデータを読み込もうとするとメモリを大幅に消費してしまう(Pythonは1配列あたりのメモリ消費量が大きい)。
そこでPythonにデフォルトで組み込まれているopen, read関数を使って、単位データ長(float32なら4byte)毎に読み込む事を考える。
この場合、open, read関数の他にstructモジュールをimportする。
>> import struct
>> fid = open(infile, 'rb') # 'r'は読み込み専用、'b'はバイナリモードで読み込みを表す
>> for i in xrange(0, 100) # 配列の数が100(10×10など)の場合
>> a = struct.unpack('f', fid.read(4)) # 'f'はfloat32の場合、doubleは'd', int8は'b', int16は'h'
>> print a
read関数の数字(4)は読み込むデータ長。
read関数は読み込んだデータを文字列として解釈してしまうので、これを数値に変換しなければならない。そのためにstruct.unpack関数を使う。