首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在matplotlib对象上使用hashlib

在matplotlib对象上使用hashlib
EN

Stack Overflow用户
提问于 2020-08-23 23:42:18
回答 1查看 233关注 0票数 0

使用Python,我试图编写比较当前输出和预期输出的测试。输出是一个matplotlib图,我想这样做而不将图形保存到文件中。

我的想法是找到对象的加密散列,所以我只需要比较一个哈希和另一个哈希,就可以确认整个对象与预期的没有变化。

对于numpy数组来说,这很好,如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
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对象的加密散列吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-24 06:56:26

您可以使用buffer_rgba()获取数字为numpy数组。在使用它之前,您必须实际绘制如下数字:

在此函数工作之前,必须至少调用

绘图一次,并更新呈现器,以便对图形进行后续更改。

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63553072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档