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 可以使用的表示,此时您将不得不花费您没有的内存不想花。
我使用 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 可以使用的表示,此时您将不得不花费您没有的内存不想花。