我正在使用numpy和Python 2.7为超大质量筛子计算大型(1亿+元素)布尔数组,并将它们写入二进制文件以便在以后读取。 NumPy bools是8位的,所以我写的文件大小比必要的大得多。由于我正在编写大量这些文件,因此我希望尽可能小地保留它们,而不必浪费大量时间/内存将它们转换为比特币并返回。
我原本打算使用bitarray模块来降低文件大小,但使用相同的算法,筛选计算时间增加了大约400%,这有点不可接受。是否有一种快速的方法来在较小的文件中写入和读回ndarray,或者这是一个我只需要处理的权衡?
答案 0 :(得分:3)
numpy.packbits
将其转换为uint8
数组进行书写,然后在阅读后再查看numpy.unpackbits
。 numpy.packbits
填充您正在打包的轴以及零以获得8的倍数,因此请确保在打开阵列包装时跟踪切断末端所需的零数。