我使用 numpy.memmap
仅将数组部分加载到我需要的内存中,而不是加载整个巨大的数组。我想对bool
数组做同样的事情。
不幸的是, bool
memmap数组未经济地存储:根据ls
,bool
memmap文件需要的空间与{{1}一样多相同数组形状的memmap文件。
所以我使用 uint8
来节省空间。不幸的是,它似乎不是懒惰:它很慢并且可能导致numpy.unpackbits
,所以显然它将数组从磁盘加载到内存中而不是在内存上提供“MemoryError
视图” bool
数组。
因此,如果我只想从文件中加载uint8
数组的某些条目,我首先必须计算它们所属的bool
条目,然后将uint8
应用于该条目,然后再次索引。
是否有一种懒惰的方法来获取位于打包位的memmap文件的“numpy.unpackbits
视图”?
答案 0 :(得分:2)
不可能。比特打包阵列的内存布局与您正在寻找的内容不兼容。阵列布局的NumPy形状和步幅模型没有子字节分辨率。即使您要创建一个模拟您想要的视图的类,尝试将其与正常的NumPy操作一起使用也需要实现NumPy可以使用的表示,此时您必须花费您不记得的内存和#39 ;我想花钱。