2

ヘッダー部分 (テキスト) と数値配列を含むバイナリ データ ファイルを読みたいと思います。f.read(block_size) を使用してヘッダー部分でストリーミングを続けることができますが、数値配列を読み取る最良の方法は何ですか?

MatLabでは、私はできる

fid = fopen(data_file_name, 'rb');
line = fread(fid, block_size, '*char'); 
data = fread(fid, 'long');

Pythonで、私がやったことは

f = open(data_file_name, 'rb')
header = f.read(block_size)

ここから、数値配列に到達する方法がわかりません。

4

1 に答える 1

5

struct.unpack数値データのアンパックに使用できます。

例えば

with open('file','rb') as fin:
    header = fin.read(header_size)
    data_str = fin.read(num_data_bytes)
    data_tuple = struct.unpack('100f',data_str)  #100 4-byte floats

データによっては、 を使用して numpy 配列に直接読み取ることができますnumpy.fromfile。その関数は開いているファイル オブジェクトを受け入れるため、ヘッダーを読み取ってから開いているファイル オブジェクトを渡すことができるため、numpy はデータを読み取ることができます。この質問では、バイナリ データを文字列から numpy 配列に読み込む詳細について質問しました。少し異なる問題ですが、そこにある答えの多くはこれにも当てはまります (エンディアンを指定する方法など)。

于 2013-04-02T14:48:11.820 に答える