numpy阵列的压缩比

2024-06-11 18:39:22 发布

您现在位置:Python中文网/ 问答频道 /正文

给定一个numpy数组,有没有一个脚本可以完全用python编写,返回它的压缩比?在

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

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


Tags: 答案numpy脚本数组手动解决方案压缩文件比值
1条回答
网友
1楼 · 发布于 2024-06-11 18:39:22

由于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))

有了结果

^{pr2}$

由于随机数是不可压缩的,这是有意义的,但有一个非零值的数组应该更好。结果依赖于savez_compression中的算法是否有效/正确。在

相关问题 更多 >