numpy数组的压缩比

时间:2017-06-16 12:16:26

标签: python arrays numpy compression

给定一个numpy数组,是否有一个可以编写的脚本,纯粹是在python中,它会返回它的压缩率?

这是一个非常简单的特定问题,如果不手动使用文件系统,我似乎无法找到一个好的解决方案。

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

1 个答案:

答案 0 :(得分:2)

由于numPy使用c,我不认为可以使用纯python解决方案,但可以使用stringIO来避免使用文件系统。使用numpy内置函数%40,我们可以将结果大小与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) 中的算法是高效/正确的。