numpy 数组的压缩比



给定一个numpy数组,是否有一个脚本可以纯粹用python编写,返回其压缩率?

这是一个非常简单、具体的问题,如果不手动使用文件系统,我似乎无法想出一个好的解决方案。

请注意,使用压缩文件本身与此问题无关。答案只需要与压缩比值有关。

由于numPy使用c,我认为纯python解决方案是不可能的,但是您可以使用stringIO避免文件系统。使用 numpy 内置函数np.savez_compression我们可以将结果大小与 np.savez 进行比较,

import StringIO
def get_compression_ratio(a):
    uncompressed = StringIO.StringIO()
    compressed = StringIO.StringIO()
    np.savez_compressed(compressed, a)
    np.savez(uncompressed, a)
    return uncompressed.len/float(compressed.len)
a = np.zeros([1000,1000])
a[23,60] = 1.
b = np.random.random([1000,1000])
print("one number = ", get_compression_ratio(a), 
      "random = ", get_compression_ratio(b))

结果,

('one number = ', 1001.0255255255255, 'random = ', 1.0604228730260878)

由于随机数是不可压缩的,因此这是有道理的,但具有一个非零值的数组应该更好。结果依赖于算法savez_compression高效/正确。

最新更新