使用少于4个字节的浮点值(0到1之间)的二进制存储?

Rya*_*ope 7 python numpy scipy

我需要将一个巨大的numpy向量存储到磁盘.现在我试图存储的矢量大约是24亿个元素,数据是float64.当序列化到磁盘时,这需要大约18GB的空间.

如果我使用struct.pack()和使用float32(4字节)我可以将它减少到~9GB.我不需要接近这个数量的精确磁盘空间将很快成为一个问题,因为我期望我需要存储的值的数量可以增长一个数量级或两个.

我想如果我能访问前4个有效数字,我可以将这些值存储在一个int中,并且只使用1或2个字节的空间.但是,我不知道如何有效地做到这一点.有没有人有任何想法或建议?

Dan*_*iel 6

如果您的数据介于0和1之间,并且16位就足够了,您可以将数据保存为uint16:

data16 = (65535 * data).round().astype(uint16)
Run Code Online (Sandbox Code Playgroud)

并使用扩展数据

data = data16 / 65535.0
Run Code Online (Sandbox Code Playgroud)