使用 Python,我正在嘗試編寫將當前輸出與預期輸出進行比較的測試。輸出是一個 matplotlib 圖,我想在不將該圖保存到文件的情況下執行此操作。我想找到對象的加密散列,這樣我只需要將一個散列與另一個散列進行比較,以確認整個對象與預期的沒有變化。這適用于 numpy 數組,如下所示:import numpy as npimport hashlibnp.random.seed(1)A = np.random.rand(10,100)actual_hash = hashlib.sha1(A).hexdigest()expected_hash = '38f682cab1f0bfefb84cdd6b112b7d10cde6147f'assert actual_hash == expected_hash當我在 matplotlib 對象上嘗試這個時,我得到:TypeError: object supporting the buffer API requiredimport hashlibimport numpy as npimport matplotlib.pyplot as pltX = np.linspace(0,100,1000)Y = np.sin(0.5*X)plt.plot(X,Y)fig = plt.gcf()actual_hash = hashlib.sha1(fig).hexdigest() #this raises the TypeError關于如何使用 hashlib 查找 matplotlib 對象的加密哈希的任何想法?
1 回答

慕斯王
TA貢獻1864條經驗 獲得超2個贊
您可以使用buffer_rgba()
.?在使用它之前,您必須實際繪制圖形:
必須至少調用一次 draw 才能運行此函數,并更新渲染器以便對圖形進行任何后續更改。
import hashlib
import numpy as np
import matplotlib.pyplot as plt
X = np.linspace(0,100,1000)
Y = np.sin(0.5*X)
plt.plot(X,Y)
canvas = plt.gcf().canvas
canvas.draw()
actual_hash = hashlib.sha1(np.array(canvas.buffer_rgba())).hexdigest()
添加回答
舉報
0/150
提交
取消