【发布时间】:2020-04-05 12:03:37
【问题描述】:
我正在尝试在 Python 3.6.8 中压缩一个 numpy 数组。
如果我运行这个 sn-p 两次(不同的解释器会话),我会得到不同的输出:
import gzip
import numpy
import base64
data = numpy.array([[1.0, 2.0, 3.0, 4.0], [5.0, 6.0, 7.0, 8.0], [9.0, 10.0, 11.0, 12.0], [13.0, 14.0, 15.0, 16.0]])
compressed = base64.standard_b64encode(gzip.compress(data.data, compresslevel=9))
print(compressed.decode('ascii'))
示例结果(每次都不一样):
H4sIAPjHiV4C/2NgAIEP9gwQ4AChOKC0AJQWgdISUFoGSitAaSUorQKl1aC0BpTWgtI6UFoPShs4AABmfqWAgAAAAA==
H4sIAPrHiV4C/2NgAIEP9gwQ4AChOKC0AJQWgdISUFoGSitAaSUorQKl1aC0BpTWgtI6UFoPShs4AABmfqWAgAAAAA==
^
在循环中运行它(所以相同的解释器会话),每次都会给出相同的结果
for _ in range(1000):
assert compressed == base64.standard_b64encode(gzip.compress(data.data, compresslevel=9))
我怎样才能每次都得到相同的结果? (最好没有外部库。)
【问题讨论】:
-
为什么这对你很重要?
-
将 mtime=0 参数添加到 gzip.compress(data.data, compresslevel=9) 时会发生什么?
-
@SinanKurmus 不存在,但如果我使用 mtime 创建自己的 BytesIO 和 GzipFile,那么它确实有效!你想把它变成答案吗?
标签: python gzip deterministic