我正在尝试使用 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()
Run Code Online (Sandbox Code Playgroud)
但我收到以下错误:
'ascii' codec can't decode byte 0xfd in position 0: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
我正在读取的文件由二进制数据组成。那么matplotlib如何处理二进制数据呢?是无符号的还是有符号的 1 字节数据?
正如您的问题的评论中所指出的,您传递给绘图的字节是不明确的。在将这些字节传递给 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()
Run Code Online (Sandbox Code Playgroud)
我已经绕了一圈房子演示如何使用 numpy.frombuffer 以及读入“data”变量的字节,但实际上您只需使用 numpy.fromfile 即可使加载行如下所示:
loaded_array = np.fromfile(fh, dtype=np.uint8)
Run Code Online (Sandbox Code Playgroud)
华泰
| 归档时间: |
|
| 查看次数: |
5479 次 |
| 最近记录: |