numpy.unpackbits 的惰性版本

Lazy version of numpy.unpackbits

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

不幸的是,bool memmap 数组的存储并不经济:根据ls,一个bool memmap 文件需要space作为相同数组形状的uint8内存映射文件。

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

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

难道没有一种懒惰的方法可以在位压缩的 memmap 文件上获得“bool 视图”吗?

不可能。位压缩数组的内存布局与您要查找的内容不兼容。数组布局的 NumPy shape-and-strides 模型没有亚字节分辨率。即使您要创建一个 class 来模拟您想要的视图,尝试将其与正常的 NumPy 操作一起使用也需要具体化 NumPy 可以使用的表示,此时您将不得不花费您没有的内存不想花。