2013-08-05 40 views
2

我使用numpy的和Python 2.7来计算大(100种亿多元素)布尔数组一个超大规模的黄金筛,并将其写入二进制文件在更晚的时间来阅读。 NumPy bools是8位的,所以我写的文件大小比必要的大得多。因为我写了大量的这些文件我想保持他们,如同力所能及,而不必浪费大量的时间/内存将它们转换为一个bitarray和背部。将numpy.bool数组写入压缩文件?

我原本打算使用bitarray模块来减小文件大小,但是使用相同的算法筛选计算时间增加了大约400%,这有点令人无法接受。有没有写在一个较小的文件读回ndarray快速上下的方式,或者这是一个折衷,我只是将不得不应对?

回答

3

numpy.packbits把它变成uint8写入数组,然后numpy.unpackbits读回来。 numpy.packbits垫你用零沿包装轴去8的倍数,所以一定要保持跟踪你需要多少个零,当你拆开阵列砍掉结束。

+3

除非数组的大小保证是8的倍数,否则他需要将其长度(或其长度模8)保存到磁盘,以切掉“np.packbits”的最后几个零打包时要添加。 – Jaime

+0

@Jaime:非常好。我甚至没有意识到这会是一个问题。 – user2357112