懒惰版本的numpy.unpackbits

时间:2018-06-14 20:26:39

标签: python numpy boolean mmap numpy-memmap

我使用 numpy.memmap仅将数组部分加载到我需要的内存中,而不是加载整个巨大的数组。我想对bool数组做同样的事情。

不幸的是, bool memmap数组未经济地存储:根据lsbool memmap文件需要的空间与{{1}一样多相同数组形状的memmap文件。

所以我使用 uint8来节省空间。不幸的是,它似乎不是懒惰:它很慢并且可能导致numpy.unpackbits,所以显然它将数组从磁盘加载到内存中而不是在内存上提供“MemoryError视图” bool数组。

因此,如果我只想从文件中加载uint8数组的某些条目,我首先必须计算它们所属的bool条目,然后将uint8应用于该条目,然后再次索引。

是否有一种懒惰的方法来获取位于打包位的memmap文件的“numpy.unpackbits视图”?

1 个答案:

答案 0 :(得分:2)

不可能。比特打包阵列的内存布局与您正在寻找的内容不兼容。阵列布局的NumPy形状和步幅模型没有子字节分辨率。即使您要创建一个模拟您想要的视图的类,尝试将其与正常的NumPy操作一起使用也需要实现NumPy可以使用的表示,此时您必须花费您不记得的内存和#39 ;我想花钱。