我正在使用numpy和Python 2.7为超大规模主筛计算大型(超过1亿个元素)布尔数组,并将它们写入二进制文件以供以后读取。 NumPy bool是8位的,因此我正在写的文件大小比需要的大得多。由于我正在编写大量这些文件,因此我希望将它们尽可能地缩小,而不必浪费大量时间/内存将它们转换为位数组再返回。

我本来打算改用bitarray模块来减小文件大小,但是在使用相同算法的情况下,筛分计算时间增加了约400%,这有点不可接受。是否有一种快速的方法来在较小的文件中写入和读取ndarray,还是这是我将不得不处理的折衷方案?

最佳答案

numpy.packbits将其转换为uint8数组以进行写入,然后将其读回后为numpy.unpackbitsnumpy.packbits将要打包的轴与零一起填充以得到8的倍数,因此请确保跟踪拆包数组时需要切掉末端的零个数。

10-04 21:47
查看更多