0

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

不幸的是,boolmemmap 数组的存储并不经济:根据ls, memmap 文件需要与相同数组形状bool的 memmap 文件一样多的空间。uint8

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

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

难道没有一种懒惰的方式来获得bool对位压缩的 memmap 文件的“视图”吗?

4

1 回答 1

2

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

于 2018-06-14T20:33:03.140 回答