Python matplotlib 如何处理二进制数据?

ton*_*nga 4 python matplotlib

我正在尝试使用 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 字节数据?

pel*_*son 5

正如您的问题的评论中所指出的,您传递给绘图的字节是不明确的。在将这些字节传递给 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)

华泰