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

正如您在问题的评论中所指出的那样,您传递给 plot 的字节是不明确的。您需要将这些字节转换为 numpy 数组(或列表/元组),然后再将其传递给 matplotlib。

一个简单的例子来证明这一点:

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)

高温高压

于 2013-08-16T07:55:20.667 回答