gpt4 book ai didi

python - 为什么 numpy.savez() 输出不可复制的文件?

转载 作者:太空狗 更新时间:2023-10-29 21:36:01 26 4
gpt4 key购买 nike

函数numpy.savez()允许在文件中存储 numpy 对象。在两个文件中存储相同的相同对象会产生两个不同的文件:

import numpy as np
some_array = np.arange(42)
np.savez('/tmp/file1', some_array=some_array)
np.savez('/tmp/file2', some_array=some_array)

两个文件不同:

$ diff /tmp/file1.npz /tmp/file2.npz 
Binary files /tmp/file1.npz and /tmp/file2.npz differ

为什么文件不一样?是否包含一些随机行为、文件名或时间戳?这可以解决或修复吗? (这是一个错误吗?)

请注意,np.save() 不是这种情况。 . np.save() 生成的文件对于相同的输入是相同的。所以我猜这与数据压缩有关。

AFAICS 只有两点不同:

$ xxd /tmp/file1.npz > /tmp/file1.hex
$ xxd /tmp/file2.npz > /tmp/file2.hex
$ diff -u0 /tmp/file1.hex /tmp/file2.hex
--- /tmp/file1.hex 2018-03-13 13:39:12.235897095 +0100
+++ /tmp/file2.hex 2018-03-13 13:39:08.743927081 +0100
@@ -1 +1 @@
-0000000: 504b 0304 1400 0000 0000 ce6c 6d4c 9c9d PK.........lmL..
+0000000: 504b 0304 1400 0000 0000 cf6c 6d4c 9c9d PK.........lmL..
@@ -30 +30 @@
-00001d0: 1403 1400 0000 0000 ce6c 6d4c 9c9d 6ad9 .........lmL..j.
+00001d0: 1403 1400 0000 0000 cf6c 6d4c 9c9d 6ad9 .........lmL..j.

我在 implementation of the function 中找不到任何好的提示,但我还没有检查压缩代码(Python 3.6 也可能有所不同)。

注意:已使用 Python 2.7 和 numpy 1.9.2 进行测试。

最佳答案

关于这个 here 有一个 github 问题:

savez() is not deterministic #9439

这似乎可以归结为 将时间戳附加到文件的 Zip 文件(如您所猜)结合临时文件的使用。

也讨论了解决方法,但似乎这个问题仍然未解决(尽管 Python>=3.6.0 现在可能是 unaffected(您似乎再次观察到了))。

关于python - 为什么 numpy.savez() 输出不可复制的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49258553/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com