3

ファイルから読み取ったバイナリ データをプロットするために matplotlib を使用しようとしています。

import matplotlib.pyplot as plt

try:
    f = open(file, 'rb')
    data = f.read(100)
    plt.plot(data)
except Exception as e:
    print(e)
finally:
    f.close()

しかし、次のエラーが発生しました。

'ascii' codec can't decode byte 0xfd in position 0: ordinal not in range(128)

私が読んでいるファイルはバイナリデータで構成されています。では、matplotlib はバイナリ データをどのように扱うのでしょうか? 符号なしまたは符号付きの 1 バイト データですか。

4

1 に答える 1

4

質問のコメントで指摘されているように、プロットに渡すバイトはあいまいです。これらのバイトを matplotlib に渡す前に、numpy 配列 (またはリスト/タプル) に変換する必要があります。

これを示す簡単な例:

import numpy as np
import matplotlib.pyplot as plt


orig_array = np.arange(10, dtype=np.uint8)
with open('my_binary_data.dat', 'wb') as write_fh:
    write_fh.write(orig_array)

with open('my_binary_data.dat', 'rb') as fh:
    loaded_array = np.frombuffer(fh.read(), dtype=np.uint8)

print loaded_array
plt.plot(loaded_array)
plt.show()

「データ」変数に読み取ったバイトで numpy.frombuffer を使用する方法を示すために家を回ってきましたが、実際には numpy.fromfile を使用して、読み込み行が次のようになるようにします。

loaded_array = np.fromfile(fh, dtype=np.uint8)

HTH

于 2013-08-16T07:55:20.667 に答える