为了账号安全,请及时绑定邮箱和手机立即绑定

在 matplotlib 对象上使用 hashlib

在 matplotlib 对象上使用 hashlib

拉莫斯之舞 2023-06-20 13:42:30
使用 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()


查看完整回答
反对 回复 2023-06-20
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信