给定一个numpy数组,是否有一个可以编写的脚本,纯粹是在python中,它会返回它的压缩率?
这是一个非常简单的特定问题,如果不手动使用文件系统,我似乎无法找到一个好的解决方案。
请注意,使用压缩文件本身与此问题无关。答案只需要与压缩比值有关。
答案 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)
中的算法是高效/正确的。