2013-08-05 149 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