我正在尝试使用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字节数据?
答案 0 :(得分:3)
正如您在问题的评论中指出的那样,您传递给绘图的字节是不明确的。在将它们传递给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.from文件,以便加载行看起来像:
loaded_array = np.fromfile(fh, dtype=np.uint8)
HTH