猿问

在 matplotlib 对象上使用 hashlib

使用 Python,我正在尝试编写将当前输出与预期输出进行比较的测试。输出是一个 matplotlib 图,我想在不将该图保存到文件的情况下执行此操作。


我想找到对象的加密散列,这样我只需要将一个散列与另一个散列进行比较,以确认整个对象与预期的没有变化。


这适用于 numpy 数组,如下所示:


import numpy as np

import hashlib

np.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 required


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)

fig = plt.gcf()

actual_hash = hashlib.sha1(fig).hexdigest() #this raises the TypeError

关于如何使用 hashlib 查找 matplotlib 对象的加密哈希的任何想法?


拉莫斯之舞
浏览 87回答 1
1回答

慕斯王

您可以使用buffer_rgba(). 在使用它之前,您必须实际绘制图形:必须至少调用一次 draw 才能运行此函数,并更新渲染器以便对图形进行任何后续更改。import hashlibimport numpy as npimport matplotlib.pyplot as pltX = np.linspace(0,100,1000)Y = np.sin(0.5*X)plt.plot(X,Y)canvas = plt.gcf().canvascanvas.draw()actual_hash = hashlib.sha1(np.array(canvas.buffer_rgba())).hexdigest()
随时随地看视频慕课网APP

相关分类

Python
我要回答