在 matplotlib 对象上使用 hashlib
Using hashlib on a matplotlib object
使用 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 对象的加密哈希吗?
谢谢。
您可以使用 buffer_rgba()
将图形作为 numpy 数组获取。在使用它之前,你必须实际绘制图形:
draw must be called at least once before this function will work and
to update the renderer for any subsequent changes to the Figure.
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()
使用 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 对象的加密哈希吗?
谢谢。
您可以使用 buffer_rgba()
将图形作为 numpy 数组获取。在使用它之前,你必须实际绘制图形:
draw must be called at least once before this function will work and to update the renderer for any subsequent changes to the Figure.
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()