zip 压缩效果出乎意料的差

问题描述 投票:0回答:1

这个Python脚本:

import numpy as np

a = np.ones((10_000_000_000), dtype='u1')
np.savez_compressed('a-zip', a=a)

产生 9.7MB 大文件。理论上,这个数组可以压缩到不到 100 个字节:71 个字节用于

.npy
标头,少量字节用于 10,000,000,000 个
1
副本。为什么 ZIP 在这里失败得如此严重?是否有另一种压缩算法可轻松用于 NumPy 数组,在与此类似的简单情况下具有更好的性能,并且使用的值大多相同?

python numpy zip compression
1个回答
0
投票

zip 和 gzip 使用的 deflate 格式本身的最大压缩比为 1032:1。接近你得到的。

您可以做的一件事就是再次压缩它。我用 gzip 压缩了你的输出,结果是 15822 字节。事实上,可以使用 gzip 将其压缩到 639 字节。您只需要解压缩多次即可恢复它。 (您可以检查 gzip 标头,如果有则解压缩,重复此操作,直到没有 gzip 标头。然后进行 npz 解压缩。)

© www.soinside.com 2019 - 2024. All rights reserved.