2013-03-18 68 views
3

我試圖使用matplotlib繪製從文件中讀取二進制數據:Python 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

你怎麼能指望'matplotlib'解釋隨機二進制數據?你在尋找什麼樣的情節? – MattDMo 2013-03-18 20:45:37

+0

如果以您知道的方式保存,您可以嘗試使用['np.memmap'函數](http://docs.scipy.org/doc/numpy/reference/generated/numpy.memmap)加載它。 HTML)。 – askewchan 2013-03-18 20:45:47

+0

@MattDMo:我正在尋找一個給出讀入二進制數據的線圖。 – tonga 2013-03-18 20:57:10

回答

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.fromfile從而裝載行的樣子:

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

HTH